【发布时间】:2015-05-21 09:35:53
【问题描述】:
我已经看过这个问题的各种版本,但无法弄清楚如何使用 system2() 将数值变量从 R 传递到 Python
例如,假设我有以下 python 脚本作为 Test.py。
a = 1
b = 2
def add(a,b):
print a + b
我可以在 R 中运行它
pypath = './Test.py'
system2('python', args=(sprintf('"%1$s"',pypath)))
但是,如果我想将 a 和 b 的值传递进去,并将 R 中的值返回给 R 对象怎么办?有点像,
a = 1
b = 2
d = system2('python',args = (sprintf('"%1$s" "%2$s" "%3$s"',pypath,a,b)))
我尝试了多种方法来做到这一点,但都失败了。我知道上面是错误的,我就是不知道怎么传入a和b,更不用说返回值了
我的问题是 (1) 有可能吗? (2) 你是怎么做到的?
【问题讨论】:
-
是的,这是可能的。但在开始之前,我认为看看 IPython 会有所帮助,它几乎是为 such integration purposes 构建的
-
传递 a 和 b 很容易。您甚至不需要像现在这样使用 spintf。 args 参数接受一个字符数组,所以你只需要
system2('python', args = c('./Test.py', as.character(a), as.character(b)))。要写入文件,作为一种解决方法,您可以使用>将输出定向到临时文件并使用 R 从文件中读取。它会更慢但它会工作 -
感谢@OganM。这正是我一直在寻找的。如何使用 > 将输出定向到使用 system2() 的文件?我已经看到它与 system 一起使用,但不是 system2()。
-
只需将其添加为另一个参数。
system2('yourcommand',c('ARG1', 'ARG2', '>/targetDir/targetFile')) -
如果您将此添加为答案,我可以投票。