R:使用;foreach“;使用英特尔MKL:“英特尔MKL”;Lapack例程中的错误代码9';dgesdd&x27&引用;
我正试图加快运行数千个线性模型的排列所需的时间。我相信英特尔MKL BLAS已被证明能提高回归计算的性能 更新:使用常规for循环再次尝试下面的代码,一次迭代后出现错误:R:使用;foreach“;使用英特尔MKL:“英特尔MKL”;Lapack例程中的错误代码9';dgesdd&x27&引用;,r,linux,foreach,intel-mkl,R,Linux,Foreach,Intel Mkl,我正试图加快运行数千个线性模型的排列所需的时间。我相信英特尔MKL BLAS已被证明能提高回归计算的性能 更新:使用常规for循环再次尝试下面的代码,一次迭代后出现错误: Error in La.svd(x, nu, nv) : error code 9 from Lapack routine 'dgesdd' 看起来,英特尔MKL如何计算SVD(相对于默认的R BLAS)的问题正在引起关注 使用svd R包中的propack.svd()函数似乎可以解决问题。 此解决方案的成功归功于GitHu
Error in La.svd(x, nu, nv) : error code 9 from Lapack routine 'dgesdd'
看起来,英特尔MKL如何计算SVD(相对于默认的R BLAS)的问题正在引起关注
使用svd R包中的propack.svd()函数似乎可以解决问题。
此解决方案的成功归功于GitHub上的NerdCommand:
遇到错误的代码块:
j=1
datTemp=foreach(1:N,.combine=cbind) %dopar% {
top10Expr=datExpr[rownames(datExpr) %in% top10pool[top10inds[,j],grep(datinfoSpec1$DatName[i],colnames(top10pool))],]
top10ME=svd(top10Expr,nu=1,nv=1)$v[,1]
if(cor(top10ME,as.numeric(top10Expr[1,]))<0){
top10ME=-1*top10ME
}
fit=lapply(rownames(datExprTemp),function(x){lm(as.numeric(datExprTemp[rownames(datExprTemp) %in% x,])~top10ME)})
j=j+1
sapply(fit,function(y){sum(y$residuals^2)/ncol(datExpr)})
} # // end N permutations
Error in { : task 1 failed - "missing value where TRUE/FALSE needed"
traceback()
3: stop(simpleError(msg, call = expr))
2: e$fun(obj, substitute(ex), parent.frame(), e$data)
1: foreach(1:N, .combine = cbind) %dopar% {
top10Expr = datExpr[rownames(datExpr) %in% top10pool[top10inds[,
j], grep(datinfoSpec1$DatName[i], colnames(top10pool))],
]
top10ME = svd(top10Expr, nu = 1, nv = 1)$v[, 1]
if (cor(top10ME, as.numeric(top10Expr[1, ])) < 0) {
top10ME = -1 * top10ME
}
fit = lapply(rownames(datExprTemp), function(x) {
lm(as.numeric(datExprTemp[rownames(datExprTemp) %in%
x, ]) ~ top10ME)
})
j = j + 1
sapply(fit, function(y) {
sum(y$residuals^2)/ncol(datExpr)
})
}
Error in { : task 2 failed - "error code 9 from Lapack routine 'dgesdd'"
traceback()
3: stop(simpleError(msg, call = expr))
2: e$fun(obj, substitute(ex), parent.frame(), e$data)
1: foreach(1:N, .combine = cbind) %dopar% {
top10Expr = datExpr[rownames(datExpr) %in% top10pool[top10inds[,
j], grep(datinfoSpec1$DatName[i], colnames(top10pool))],
]
top10ME = svd(top10Expr, nu = 1, nv = 1)$v[, 1]
if (cor(top10ME, as.numeric(top10Expr[1, ])) < 0) {
top10ME = -1 * top10ME
}
fit = lapply(rownames(datExprTemp), function(x) {
lm(as.numeric(datExprTemp[rownames(datExprTemp) %in%
x, ]) ~ top10ME)
})
j = j + 1
sapply(fit, function(y) {
sum(y$residuals^2)/ncol(datExpr)
})
}
R version 4.0.3 (2020-10-10)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Devuan GNU/Linux 3 (beowulf)
Matrix products: default
BLAS/LAPACK: /opt/intel/compilers_and_libraries_2018.2.199/linux/mkl/lib/intel64_lin/libmkl_rt.so
locale:
[1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C LC_TIME=en_US.UTF-8
[4] LC_COLLATE=en_US.UTF-8 LC_MONETARY=en_US.UTF-8 LC_MESSAGES=en_US.UTF-8
[7] LC_PAPER=en_US.UTF-8 LC_NAME=C LC_ADDRESS=C
[10] LC_TELEPHONE=C LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
attached base packages:
[1] parallel stats graphics grDevices utils datasets methods base
other attached packages:
[1] tibble_3.0.3 rlang_0.4.7 doParallel_1.0.15 iterators_1.0.12 foreach_1.5.0
[6] dplyr_1.0.2 data.table_1.13.0
loaded via a namespace (and not attached):
[1] codetools_0.2-16 crayon_1.3.4 R6_2.4.1 lifecycle_0.2.0 magrittr_1.5 pillar_1.4.6
[7] rstudioapi_0.11 vctrs_0.3.4 generics_0.0.2 ellipsis_0.3.1 tools_4.0.3 glue_1.4.2
[13] purrr_0.3.4 compiler_4.0.3 pkgconfig_2.0.3 tidyselect_1.1.0