R mclappy:在多核机器上运行的Lappy黑客不';不适用于特定的库(pdist)功能

R mclappy:在多核机器上运行的Lappy黑客不';不适用于特定的库(pdist)功能,r,parallel-processing,R,Parallel Processing,第一:我的问题的根源是Nathan VanHoudnos对Windows“Lappy”并行处理实现的攻击 我的目标是应用距离函数“pdist”来计算两个矩阵之间的“距离” 原始代码工作得很好-但是当我尝试使用“pdist”库函数时,出现了一些错误 我还确保clusterExport()代码中包含了“pdist”函数名 我得到的错误是: checkForRemoteErrors(val)中出错: 4个节点产生错误;第一个错误:C符号名称“Rpdist”不在加载表中 在此复制代码: ## Load

第一:我的问题的根源是Nathan VanHoudnos对Windows“Lappy”并行处理实现的攻击

我的目标是应用距离函数“pdist”来计算两个矩阵之间的“距离”

原始代码工作得很好-但是当我尝试使用“pdist”库函数时,出现了一些错误

我还确保clusterExport()代码中包含了“pdist”函数名

我得到的错误是:

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");
##加载包
需要(并行)
需要(pdist)
#定义全局变量
A=rbind(c(3,40,1),c(24,13,2),c(90,8,1));
B=rbind(c(23,4,11),c(13913,12),c(0.9,0.8,0.1));
##步骤1:创建子进程集群
cat(“\n步骤1:创建子进程群集…”);

cl您的示例对我有效,因此我怀疑工作人员无法在您的机器上成功加载
pdist
包。
par.setup
的值应该是一个包含四个
TRUE
值的列表。如果没有,则需要解决该问题,可能是在加载
pdist
之前对worker执行
.libpath


此外,使用
clusterExport
pdist
导出给工作人员也没有意义。如果您可以成功地将
pdist
包加载到工作程序上,则不需要这样做,而且这是不够的,因为它依赖于
pdist
包中没有通过
clusterExport
发送给工作程序的代码。它所做的只是将错误消息更改为您现在看到的消息。

您确定要使用
par.setup
导出库吗?在
的帮助文件中,clusterExport
库调用在函数的开头是明确的。我试过了,它返回了四个3x3矩阵。你好,罗曼,谢谢!PAR.Studio帮助我调试了我的问题,史提夫的答案在下面解决了。非常感谢史蒂夫,非常感谢你。这解决了我的问题!