我在这里发布的这个问题实际上是由于服务器的配置。该包实际上没有与R / C相关的问题。
我正在使用foreach开发一个R包来加速计算。为了说明包的结构,我给出了一个简化的R脚本和一个C文件:
f3.R:
f3 = function(.lst){
cl <- makeCluster(2)
registerDoParallel(cl)
f1 <-function(x){
tmp <- .C("foo")
x
}
f2 <-function(x){
f1(x)
}
foreach(x=.lst, .verbose = TRUE ) %dopar% {
f2(x)
}
}
foo.c的
#include <stdio.h>
#include <R.h>
extern "C" {
void foo() {
;
}
}
此程序包在Mac OS上运行良好,但会抛出错误消息
从本地环境自动导出以下变量:f1,f2
numValues:1,numResults:0,停止:TRUE
获得任务1的结果
累积得到错误结果
numValues:1,numResults:1,停止:TRUE
由于错误而未调用合并功能
返回状态为TRUE
{:任务1失败 - &#34; C符号名称&#34; foo&#34;不在装载表中#34;
这是我尝试过的:
.export = c("foo")
:没有帮助f1()
和f2()
移至单独的R脚本并添加.export = c("f1", "f2")
:也可以在Mac OS上工作,但对Linux没有帮助f1()
和f2()
移到单独的R脚本并添加.export = c("f1", "f2")
,则会再次在Linux上失败。从互联网上发现的大多数帖子建议使用.export
导出R函数,但我没有找到有关导出C符号的任何内容。
答案 0 :(得分:0)
我通过创建一个包含所有带有.C的功能的软件包来解决了这个问题。 然后添加.packages =“ yourpackage”并导出所有需要的功能。