【发布时间】:2014-06-13 13:46:41
【问题描述】:
我一直在使用 R 中的库“doParallel”来提高一组函数的速度。 但是,我遇到了一个我无法解决的错误。我相信以下代码可以找出问题的本质:
library(Matrix)
library(doParallel)
test_mat = Matrix(c(0,1,2,NA,0,0,2,NA,1,NA,1,2,2,NA,0,1,0,2,2,2,0,0,NA,NA,1,2,1,1,2,1,rep(NA,5)), ncol=7, byrow=TRUE, sparse=TRUE)
par_func <- function(mat, ncores)
{
cl <- makePSOCKcluster(ncores)
clusterSetRNGStream(cl)
registerDoParallel(cl, cores = ncores)
df = data.frame(1:7, NA)
temp_vec = foreach(i=iter(df, by='row'), .combine=rbind) %dopar%
{
i[,2] <- sum(mat[,i[,1]] == 1, na.rm = TRUE) + 1
}
stopCluster(cl)
return(temp_vec)
}
par_func(mat=test_mat, ncores=5)
这会产生以下错误消息:
Error in { : task 1 failed - "object of type 'S4' is not subsettable"
如果“mat”属于“matrix”类而不是“dgCMatrix”类,则此函数有效,因此问题似乎是由于稀疏矩阵的子集所致。我有什么办法可以解决这个问题吗?矩阵 'mat' 可以非常大并且可以包含许多零,所以我想继续使用稀疏矩阵。
【问题讨论】:
标签: r parallel-processing sparse-matrix