字符串传递给 rpy2 的奇怪行为 - 从字符串中删除前导零
Strange behaviour with string passing to rpy2 - deleting leading zeros from string
我正在尝试在 rpy2 脚本中调用 python 字符串变量。该变量的形状应该是“01”。
我遇到了以下行为:
import rpy2.robjects as robjects
string_to_pass = "01"
robjects.r('''print(paste("Output from R with format and paste:",{}))'''.format(string_to_pass))
将给出以下输出:
[1] "Output from R with format and paste: 1"
请注意,字符串的前导零被截断了。
另一方面,这些行将按预期工作:
print("Output from python with format: {}".format(string_to_pass))
robjects.r('''print("Output from R with format: {}")'''.format(string_to_pass))
robjects.r('''print(paste("Output from R with pasting a string:", "01"))''')
输出:
Output from python with format: 01
[1] "Output from R with format: 01"
[1] "Output from R with pasting a string: 01"
有人能解释一下这里发生了什么吗,仅当结合 python .format() 和 r paste() 时,以及如何避免它?
查看传递给 rpy2 以作为 R 代码进行评估的字符串应该可以清楚地了解正在发生的事情。
第一种情况下R代码串为:
print(paste("Output from R with format and paste:", 01))
数字01是一个1,R会打印它有一个这样的。要有一个前导零,应该使用 R 数字格式化函数。
第二种情况是:
print(paste("Output from R with format and paste: 01"))
我说
解决了问题
string_to_pass = "'01'"
robjects.r('''print(paste("Output from R with format and paste:",{}))'''.format(string_to_pass))
注意额外的内引号,这对于 R 将其识别为字符串似乎也很重要。
我正在尝试在 rpy2 脚本中调用 python 字符串变量。该变量的形状应该是“01”。
我遇到了以下行为:
import rpy2.robjects as robjects
string_to_pass = "01"
robjects.r('''print(paste("Output from R with format and paste:",{}))'''.format(string_to_pass))
将给出以下输出:
[1] "Output from R with format and paste: 1"
请注意,字符串的前导零被截断了。
另一方面,这些行将按预期工作:
print("Output from python with format: {}".format(string_to_pass))
robjects.r('''print("Output from R with format: {}")'''.format(string_to_pass))
robjects.r('''print(paste("Output from R with pasting a string:", "01"))''')
输出:
Output from python with format: 01
[1] "Output from R with format: 01"
[1] "Output from R with pasting a string: 01"
有人能解释一下这里发生了什么吗,仅当结合 python .format() 和 r paste() 时,以及如何避免它?
查看传递给 rpy2 以作为 R 代码进行评估的字符串应该可以清楚地了解正在发生的事情。
第一种情况下R代码串为:
print(paste("Output from R with format and paste:", 01))
数字01是一个1,R会打印它有一个这样的。要有一个前导零,应该使用 R 数字格式化函数。
第二种情况是:
print(paste("Output from R with format and paste: 01"))
我说
解决了问题string_to_pass = "'01'"
robjects.r('''print(paste("Output from R with format and paste:",{}))'''.format(string_to_pass))
注意额外的内引号,这对于 R 将其识别为字符串似乎也很重要。