然后使用rpy2分配然后在python中附加文件路径名

时间:2014-08-22 23:53:15

标签: python r rpy2

这是我昨天问过的一个问题的补遗:Problems Sourcing in an R file into python using rpy2

在我的案例中,问题有两个问题。 @ MattDMo的解决方案(感谢Matt)调用.R脚本是正确的。但是,我认为我的错误是如何在python脚本中引用文件路径名,然后用于在.R文件中提供源。

在我的python脚本中,我有这个,

codeLoc = "../rcode"

接着是这个,

rpy.r.assign("codeLoc", codeLoc)

此assign函数将代码位置文件路径附加到我尝试输入的R脚本中的变量(“codeLoc”)。

最初,python脚本使用了这个:

rpy.r.source(codeLoc + "/filename.R")

真的很简单! 但是现在rpy2做了一些东西,所以我必须使用字符串等。所以,知道

ro.r("""source('filename.R')""")

<。> .R脚本中的源代码,我如何将文件路径名称附加到脚本中,这样我就不必每次都调用它(因为我需要在几个不同的时间使用相同的文件路径,以及路径可能在未来发生变化)。基本上,我需要一个正确的这个伪代码的rpy2版本:

ro.r("""source(codeLoc + ('/filename.R')""")

我的预感是我可能需要改变使用rpy2分配codeLoc本身的方式?由于不正确使用assign方法,R和Python可能没有正确地相互通信?

提前致谢...

1 个答案:

答案 0 :(得分:1)

新的方式实际上让你的事情变得更轻松。您可以只指定字符串(如果需要,动态调用)并调用它,而不必调用r.assign。例如,

codeLoc = "../rcode"
r_call = "source('" + codeLoc + "/filename.R')"
ro.r(r_call)

修改 如果您要打开一系列文件,可以在for循环中动态调用它们。我将讨论两种情况。首先,名称被索引(例如,filename1,filename2等),其次,它们没有被索引。

1)如果文件名的索引是ind_max是最大文件号,你可以source如下:

for num in range(ind_max):
    ro.r("source('" + codeLoc + "/filename" + str(num) + ".R')")

2)如果文件名没有编入索引,你可以通过定义你想要source的名字列表来做同样的事情:

names = ['spam', 'eggs']
for name in names:
    ro.r("source('" + codeLoc + "/filename" + name + ".R')")