第一:我的问题的根源是" lapply"的并行处理实现的黑客攻击。 for Windows - 作者:Nathan VanHoudnos
http://edustatistics.org/nathanvan/2014/07/14/implementing-mclapply-on-windows/
我的目标是应用" pdist",距离函数来计算"距离"在两个矩阵之间。
原始代码工作得很好 - 但是当我尝试使用' pdist'时出现问题。图书馆功能。
我也确保了' pdist'函数名称包含在clusterExport()代码中。
我得到的错误是:
checkForRemoteErrors(val)出错: 4个节点产生错误;第一个错误:C符号名称" Rpdist"不在装载表
在这里重现了代码:
## Load packages
require(parallel)
require(pdist)
# Define global variables
A = rbind(c(3,40,1),c(24,13,2), c(90,8,1));
B = rbind(c(23,4,11),c(13,913,12), c(0.9,0.8,0.1));
## Step 1: Create a cluster of child processes
cat("\n Step 1: Create a cluster of child processes....");
cl <- makeCluster(4)
## Step 2: Load the necessary R package(s)
## N.B. length(cl) is the number of child processes in the cluster
cat("\n Step 2: Load the necessary R package(s)....");
par.setup <- parLapply (cl, 1:length(cl),
function(xx) {
require(pdist)
})
## Step 3: Distribute the necessary R objects
cat("\n Step 3: Distribute the necessary R objects....");
clusterExport (cl, c('A', 'B', 'pdist'))
## Step 4: Do the computation
cat("\n Step 4: Do the multi-core computation....\n");
par.Distance <- parLapply (cl, 1:4,
function(xx) {
as.matrix(pdist(A, B))
})
## Step 5: Remember to stop the cluster!
cat("\n Step 5: Stop the clusters....\n");
stopCluster(cl)
cat("\n Output: "); print(par.Distance);
cat("\n ----------------------------- \n");
感谢您的帮助。
答案 0 :(得分:1)
您的示例对我有用,因此我怀疑工作人员无法在您的计算机上成功加载pdist
包。 par.setup
的值应为包含四个TRUE
值的列表。如果没有,您需要解决该问题,可能是在加载.libPaths
之前对工作人员执行pdist
。
此外,使用pdist
将clusterExport
导出给工作人员毫无意义。如果您可以在工作人员上成功加载pdist
软件包,则没有必要,因为它取决于pdist
软件包中没有的代码,这是不够的。由clusterExport
发送给工人。它只是将错误信息更改为您现在看到的信息。