r - 在 Scala 或 Java 中加载包到 Renjin

标签 r scala renjin

我正在运行一个 scala 应用程序,我想使用 Renjin 调用一个 R 文件,并将值从 scala 传递到 R 文件。当我从 scala 加载 R 文件时,我收到关于找不到 laply 包的错误。如果有人能告诉我如何使用 Renjin 将 R 包加载到 scala 中,那就太好了。

下面是我在scala中使用Renjin调用R文件的代码

  1. 使用以下命令复制带有依赖项的 jar 文件

    scala -cp renjin-script-engine-0.7.0-RC6-jar-with-dependencies.jar

  2. 现在 scala 解释器启动了。

    导入 javax.script.; 导入 org.renjin.sexp.;

    val factory = new ScriptEngineManager();

//创建一个R引擎

val engine = factory.getEngineByName("Renjin");

//评估磁盘上的 R 脚本

engine.eval(new java.io.FileReader("myscript.R"));

在这一步错误继续找不到函数'lapply'

如何将包添加到 Renjin。我在哪里添加类路径。

下面是R文件的代码

score.sentiment = function (sentences, pos.words,neg.words, .progress='none')
{
  require(plyr)
  require(stringr)

  scores =  laply(sentences, function(sentence,pos.words,neg.words){

    sentence = gsub('[[:punct:]]','',sentence)
    sentence = gsub('[[:cntrl:]]','',sentence)
    sentence = gsub('\\d+','',sentence)
    sentence = tolower(sentence)

    word.list = str_split(sentence, '\\s+')
    words = unlist(word.list)

    pos.matches = match(words, pos.words)

    neg.matches = match(words, neg.words)

    pos.matches = !is.na(pos.matches)

    neg.matches = !is.na(neg.matches)

    score = sum(pos.matches) - sum (neg.matches)

    return(score)

  },pos.words, neg.words, .progress = .progress)

  scores.df = data.frame(score=scores, text=sentences)

  return(scores.df)

}

问题的第二部分是如何将参数从 scala 控制台传递到此 R 文件。

例如,这里的句子是一条推文。我想将它从 scala 发送到 R 函数。

最佳答案

我不相信plyrstringr将与 Renjin 开箱即用。我没有检查过,但我认为 plyr 与 GNU R 的 C Api 一起工作时相当神奇,而 Renjin 似乎 choke关于 stringr 的一些测试函数。

但是,我认为您不需要上述函数中的任何一个包,只需将基础包中的 laply 和 str_split 分别替换为 sapply 和 strsplit 即可。

按照上述方法评估函数定义后,您可以使用 [invokeFunction]( http://docs.oracle.com/javase/7/docs/api/javax/script/Invocable.html#invokeFunction(java.lang.String , java.lang.Object...)) 方法从 Scala/Java 调用此函数:

((Invocable)engine).invokeFunction("score.sentiment", 
       "Best pizza EVER!",
       new String[] { "best", "cool" },
       new String[] { "sucks", "awful" });

Renjin 会将字符串数组转换为 StringVector 对象(R 字符对象),但您也可以自己创建 StringVector 对象。

http://docs.oracle.com/javase/7/docs/api/javax/script/Invocable.html#invokeFunction(java.lang.String , java.lang.Object...)

关于r - 在 Scala 或 Java 中加载包到 Renjin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22951471/

相关文章:

Scalaz 验证 : convert sequence of validations to a single validation

java - 单元测试仅在由 maven 运行时失败

java - Renjin 不识别德语元音变音

r - 用R中的图表可视化交叉表

list - scala - 获取列表的只读子 ListView

mysql - 如何在 Scala 中生成大量唯一的随机字符串

java - 从 Java Servlet 运行 R 代码

r - 使用 ggplot2 出现意外的 Walker 别名表输出

r - 在 R 中的 "%H%M"箱中聚合平均值 "week"

具有覆盖元素的 R rep 函数