我在这里发布的这个问题实际上是由于服务器的配置造成的。该软件包实际上没有与 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 失败 - “C 符号名称“foo”不在加载表中”
这是我尝试过的:
- 补充
.export = c("foo")
:没有帮助 - 移动
f1()
到f2()
一个单独的 R 脚本并添加.export = c("f1", "f2")
:也可以在 Mac OS 上工作,但在 linux 上没有帮助 - 如果我不构建包,而是直接将上面的函数加载到内存中,那么它可以在 Mac OS 和 Linux 上运行
- 如果没有调用 C 函数(请注意,在我的示例中,C 代码什么也没做),那么它可以在 Mac OS 和 Linux 上运行。但是,如果我移动
f1()
并f2()
分离 R 脚本并添加.export = c("f1", "f2")
,它会再次在 Linux 上失败。
从互联网上找到的大多数帖子都建议使用.export
导出 R 函数,但我没有找到任何关于导出 C 符号的信息。