用于lappy的函数返回parlappy的错误
我有一个函数,我正在与lapply一起使用,它工作得很好。我已经尝试将lappy转换为parlappy,现在它在集群节点1处理元素1上返回一个用于lappy的函数返回parlappy的错误,r,lapply,doparallel,R,Lapply,Doparallel,我有一个函数,我正在与lapply一起使用,它工作得很好。我已经尝试将lappy转换为parlappy,现在它在集群节点1处理元素1上返回一个错误:“closure”类型的对象不可子集。这是我如何设置并行环境的问题,还是其他问题 我正在使用的函数: setLimits<-function(col){ if(choice=="num"){ if (auto=="0"){ high=inHigh[count] low=in
错误:“closure”类型的对象不可子集。这是我如何设置并行环境的问题,还是其他问题
我正在使用的函数:
setLimits<-function(col){
if(choice=="num"){
if (auto=="0"){
high=inHigh[count]
low=inLow[count]
}
else{
high=inHigh[1]
low=inLow[1]
}
}
else{
if (auto=="0"){
high=attributes(dt[,col])$SpotfireColumnMetaData$limits.prod.upper+attributes(dt[,col])$SpotfireColumnMetaData$limits.prod.upper*(inHigh[count]/100)
low=attributes(dt[,col])$SpotfireColumnMetaData$limits.prod.lower+attributes(dt[,col])$SpotfireColumnMetaData$limits.prod.lower*(inLow[count]/100)
}
else{
high=attributes(dt[,col])$SpotfireColumnMetaData$limits.prod.upper+attributes(dt[,col])$SpotfireColumnMetaData$limits.prod.upper*(inHigh[1]/100)
low=attributes(dt[,col])$SpotfireColumnMetaData$limits.prod.lower+attributes(dt[,col])$SpotfireColumnMetaData$limits.prod.lower*(inLow[1]/100)
}
}
list(low,high)
}
调用lappy:
inVal=lapply(1:ncol(dt),setLimits)
很抱歉,我将无法提供dt,并且dput
似乎不适用于我正在使用的程序。dt存储为data.frame。我确实稍微简化了函数,但我试图保留其中发生的主要内容。您是否使用clusterExport
将dt
复制到集群节点?我认为集群将dt
视为函数stats::dt
。您还应该导出函数中的choice
、count
以及任何其他必需但未作为函数参数提供的对象。@BenBarnes如果这些对象保存为全局变量,我还需要导出它们吗?而且dt相当大,所以导出它会使它慢很多吗?如果你使用WIndows,那么是的,你必须导出全局变量。如果您使用的是Linux/Mac,那么您可以使用fork。看一个好的概览是的,你需要。从上面我看到的,也许你可以先创建一个列属性列表。也许你甚至不需要循环through@BenBarnes出于某种原因,我发现没有找到dt对象。我认为这和我使用r的程序有关。有没有办法让两个输入同时速率,或者在另一个参数中使用X输入值?就像我的例子中的parlappy(cl=cluster,X=1:ncol(dt),fun=setLimits,arg2=dt[,X])
inVal=parLapply(cl=cluster,X=1:ncol(dt),fun=setLimits)
inVal=lapply(1:ncol(dt),setLimits)