采购多个R文件

时间:2017-05-24 11:13:00

标签: java r function google-cloud-dataflow renjin

目前我在我的本地机器上使用R,我可以有条件地获取多个R脚本(因为它们放在我的本地驱动器中)。

但是,当我需要在Google Data Flow中使用RENJIN上的相同脚本来实现并行性时,我无法获取文件。

我有多个扩展名为.R的R脚本文件。我需要读取主R脚本文件,并且需要在运行时传入数据流,但主R文件必须是引用其他R脚本文件的源标记。 从java读取主要R文件内容并将其传递给google数据流时,Jave无法解释R文件中引用其他R脚本文件的源标记。

为了处理这种情况,我可能会使用一个不整洁的解决方案将整个代码保存在一个文件中。具有不同的功能名称。

Renjin有没有办法保存所有需要使用的R脚本文件,并在运行时传递给谷歌数据流。

2 个答案:

答案 0 :(得分:0)

最合乎逻辑的解决方案是在这里使用一个包。我假设你可以在谷歌云上安装自定义软件包(只是让基础R会很痛苦)。然后我将这些函数和代码放在R包中,并安装该包。这将摆脱source的使用,并允许包含文档和测试。

答案 1 :(得分:0)

如果您的资源作为资源包含在您正在部署到Google Cloud Dataflow的JAR中,那么您可以使用“res”网址来源它们:

source("res:com/acme/scripts/myscript.R")

如果您无法更改脚本中的路径,请确保它们至少是相对的,例如:

source("myscript.R")

然后在创建新的ScriptEngine时设置工作目录。

RenjinScriptEngineFactory factory = new RenjinScriptEngineFactory();
ScriptEngine engine = factory.getEngine();
engine.eval("setwd('res:com/acme/scripts')");

请注意,如果类路径上只有一个具有该路径的JAR,则只能将工作目录设置为类路径上的某个位置。例如,如果我评估:

> setwd("res:org/renjin")
> getwd()
[1] "jar:file:///usr/share/renjin/lib/compiler-0.8.2337.jar!/org/renjin"

上面将工作目录设置为类路径上的第一个目录'org / renjin',这可能不是你想要的。

无论如何,我绝对鼓励你按照上面的建议将文件放在一起打包,但也许这会让事情发生变化。