这是我昨天问的一个问题的附录:使用rpy2将R文件输入python的问题
就我而言,这个问题有两个方面。@MattDMo的.R脚本中调用的解决方案(感谢Matt)是正确的。但是,我认为我的错误是如何在python脚本中引用文件路径名,然后将其用于.R文件中的源代码。
在我的python脚本中,我有这个
codeLoc = "../rcode"
其次,
rpy.r.assign("codeLoc", codeLoc)
这个赋值函数将代码位置文件路径附加到我尝试提供源代码的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无法正确通信吗?
提前致谢...
新方法实际上使事情变得更轻松。不必调用r.assign,而只需指定字符串(如果需要,可以动态地指定)并调用它即可。例如,
codeLoc = "../rcode"
r_call = "source('" + codeLoc + "/filename.R')"
ro.r(r_call)
编辑如果您要打开一系列文件,则可以在for循环中动态调用它们。我将处理两种情况。首先,对名称建立索引(例如,文件名1,文件名2等),其次,不对名称进行索引。
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')")
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句