我希望调用具有多个输入参数的rPy2
函数。这是我尝试使用的R函数write.csv。它有多个输入参数,我需要指定多个这样的参数。
如果我在没有可选参数 row.names
和 column.names
的情况下使用它,它的工作原理是这样的:
r("write.csv")(d,file='myfilename.csv')
对于我的要求,我必须使用可选参数 row.names
和 column.names
发出此命令。所以,我尝试了:
r('write.csv')(d, file='myfilename.csv', row.names=FALSE, column.names=FALSE)
但我收到此错误消息:
File "/home/UserName/test.py", line 12
r("write.csv")(d,file='myfilename.csv',row.names=FALSE, column.names=FALSE)
SyntaxError: keyword can't be an expression
[Finished in 0.0s with exit code 1]
[shell_cmd: python -u "/home/UserName/test.py"]
[dir: /home/UserName]
[path: /home/UserName/bin:/home/UserName/.local/bin:/usr/local/sbin:/usr/local/bin:
.../usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin]
如何在rPy2
中实现row.names=FALSE
和column.names=FALSE
的write.csv
?
使用Python的**
。
请参阅此处的注释:http://rpy2.readthedocs.io/en/version_2.8.x/robjects_functions.html#callable
错误是我应该用_
替换.
,如此处的文档所示:
from rpy2.robjects.packages import importr
base = importr('base')
base.rank(0, na_last = True)
所以我同样需要row_names = TRUE
.但是,write.csv()
.
仍然存在,因此仅解决了部分问题。好的,所以我尝试了一些方法来得到答案:
生成示例数据:
from rpy2.robjects import r, globalenv
from rpy2.robjects import IntVector, DataFrame
d = {'a': IntVector((1,2,3)), 'b': IntVector((4,5,6))}
dataf = DataFrame(d)
尝试如下 - 1. 不起作用, 2. 和 3. 确实有效:
1:
r('write_csv')(x=dataf,file='testing.csv',row_names=False)
Traceback (most recent call last):
File "C:UsersUserNameFileDtest.py", line 18, in <module>
r('write_csv')(x=dataf,file='testing.csv',row_names=False)
File "C:Python27libsite-packagesrpy2robjects__init__.py", line 321, in __call__
res = self.eval(p)
File "C:Python27libsite-packagesrpy2robjectsfunctions.py", line 178, in __call__
return super(SignatureTranslatedFunction, self).__call__(*args, **kwargs)
File "C:Python27libsite-packagesrpy2robjectsfunctions.py", line 106, in __call__
res = super(Function, self).__call__(*new_args, **new_kwargs)
rpy2.rinterface.RRuntimeError: Error in eval(expr, envir, enclos) : object 'write_csv'
..not found
Error in eval(expr, envir, enclos) : object 'write_csv' not found
阿拉伯数字。
r('''
write_csv <- function(x,verbose=FALSE)
write.csv(x,file='testing.csv',row.names=FALSE)
''')
r['write_csv'](dataf)
3.
globalenv['dataf'] = dataf
r("write.csv(dataf,file='testing2.csv',row.names=FALSE)")
我真的希望尝试 1. 会奏效。似乎我已经在文档中重现了该示例base.rank(0, na_last = True)
,但我认为可能仍然缺少一些东西。