0

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

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

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

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

Renjin 有什么方法可以保存所有需要使用的 R 脚本文件并在运行时传递给谷歌数据流。

4

2 回答 2

0

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

于 2017-05-24T11:25:39.307 回答
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”,这可能不是您想要的。

无论如何,我肯定会鼓励您按照上面的建议将文件放在一起打包,但也许这将有助于推动事情的发展。

于 2017-05-30T07:01:45.130 回答