将R对象返回到Ruby环境

时间:2014-08-06 16:05:36

标签: ruby r amazon-s3

我在Ruby脚本中运行R代码。 R代码创建一个JSON对象,该对象将返回到Ruby环境,以便最终可以编码并上传到亚马逊S3实例。

以下是Ruby脚本示例:

require "rinruby"
#Use R code
R.eval <<EOF
   counter <- counts
   source(file="rubytest.r")
EOF

这是Ruby脚本调用的示例R脚本:

library("jsonlite")
ls <- list("a", "b", "c", "d", "e")
testJSON <- toJSON(ls)

print(testJSON)

我猜测print()命令不是要走的路。任何帮助将不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:1)

我已成功找到一种方法将简单的JSON对象从R环境传递到Ruby环境:

require "rinruby"
require "json"

R.eval <<EOF
   library("jsonlite")
   ls <- list("a", "b", "c", "d", "e")
   testJSON <- as.character(toJSON(ls))
EOF

data = JSON.parse R.testJSON
puts data

关键是使用as.character()函数强制JSON输出成为代码的R部分中的字符类。不确定这是否适用于更复杂的JSON对象。

答案 1 :(得分:0)

根据Gem readme file中提供的示例,您只需在R代码块中指定值,然后通过R访问这些值:

 R.eval <<EOF
   library("jsonlite")
   ls <- list("a", "b", "c", "d", "e")
   testJSON <- toJSON(ls)
 EOF

 data = JSON.parse R.testJSON

(我可能会补充一点,这只是一个疯狂的猜测 - 我实际上并没有对此进行测试。)