我正在尝试通过在 Linux 上使用多核计划来使用未来包加速我的 R 代码。在未来的定义中,我正在创建一个 java 对象并尝试将其传递给 .jcall(),但将来我会为 java 对象获得一个空值。谁能帮我解决这个问题。以下是示例代码-
library("future")
plan(multicore)
library(rJava)
.jinit()
# preprocess is a user defined function
my_value <- preprocess(a = value){
# some preprocessing task here
# time consuming statistical analysis here
return(lreturn) # return a list of 3 components
}
obj=.jnew("java.custom.class")
f <- future({
.jcall(obj, "V", "CustomJavaMethod", my_value)
})
基本上我正在处理大型流数据。在上面的代码中,我将流数据字符串发送到用户定义的函数进行统计分析并返回 3 个组件的列表。然后想将此列表发送到自定义 java 类 [java.custom.class] 以使用自定义 Java 方法 [CustomJavaMethod] 进行进一步处理。不使用未来我的代码运行良好。但是我在一分钟内获得了 12 条流记录,然后我的代码变慢了,观察到处理延迟。
目前我使用的是 16 核的 Unix。使用 future 包后,我的过程很快完成。我已经追溯了我的代码,在 .jcall 中发生了错误。
希望这能澄清我的痛苦。