【问题标题】:Pass variable into python script from R using system2()使用 system2() 将变量从 R 传递到 python 脚本
【发布时间】: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'))
  • 如果您将此添加为答案,我可以投票。

标签: python r


【解决方案1】:

System2 接收一个字符数组。因此,与其尝试提​​供整个字符串,您可以这样做

system2('python', args = c('./Test.py', as.character(a), as.character(b)))

将输出传输到 R 的一种方法是使用 ">" 将其写入文件,然后从 R 读取文件。(我确信这不是最有效的方法)。

system2('python',args = c('/Test.py', as.character(a), as.character(b), '>/targetDir/targetFile'))

【讨论】:

    【解决方案2】:

    我总是把我的整个字符串连接在一起......

    a <- "/path/to/python"
    b <- "script_to_call.py"
    c <- 1
    
    system(paste0(a, " ", b, " ", c))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-02
      • 1970-01-01
      • 1970-01-01
      • 2017-11-12
      • 2018-09-22
      • 2019-10-18
      相关资源
      最近更新 更多