在用R中的glmnet包创建预测模型时,我观察到了这里提到的相同的错误和here。但是,建议的重新安装glmnet包的解决方案并没有解决我的问题。
my_glmnet_script.R**:** 最小工作示例
#!/usr/bin/env Rscript --vanilla
# load libraries
library(methods)
library(glmnet)
library(doParallel)
# create toy model
n = 100
p = 250
x = matrix(rnorm(n*p), n, p)
y = matrix(rnorm(n), n, 1)
# number of parallel cores to use
ncores = 4
registerDoParallel(ncores)
# print this before glmnet throws error
print(sessionInfo())
# fit model
my.glmnet = cv.glmnet(x=x, y=y, grouped=FALSE, parallel=TRUE, nfolds=n)
cat("end script.\n")我的命令:
nohup Rscript my_glmnet_script.R > nohup.out 2> nohup.err &nohup.out**:** 输出文件
R版本3.4.3 (2017-11-30)平台: x86_64-redhat- Linux -gnu (64位),运行在: CentOS Linux 7(核心)矩阵产品:默认BLAS/LAPACK: /usr/lib 64/R/lib/libRblas.so地区:1 LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C 3 LC_TIME=en_US.UTF-8 LC_COLLATE=en_usr.usr 8 LC_LC=en_us.utf-8LC_MESSAGES=en_US.UTF-8 7 LC_ utils =en_LC.2.0 8 LC_NAME=C 9 LC_ADDRESS=C LC_TELEPHONE=C 11 LC_测=en_us.utf-8 LC_IDENTIFICATION=C附加基包:1种并行方法_1.4.3 5矩阵_1.2-12通过命名空间加载(未附加):1 compiler_3.4.3码工具_0.2-15 grid_3.4.3格_0.20-35
nohup.err**:** 错误文件
nohup:忽略输入加载所需的包:矩阵加载所需的包: foreach加载的glmnet 2.0-16所需的包:迭代器加载所需的包:.Fortran中的并行错误( "get_int_parms“,fdev = double(1),eps = double(1),:.Fortran()对" glmnet”调用不可用的“get_int_parms”:cv.glmnet -> glmnet -> glmnet.control -> .Fortran,暂停执行
来自Rscript --version的输出
R脚本前端版本3.3.3 (2017-03-06)
令人困惑的是,下面的命令工作得很好:
Rscript my_glmnet_script.R如果我从R内调用source("my_glmnet_script.R"),它也可以正常运行。
为什么nohup对glmnet和Rscript表现不好?有一个R包,我可以加载,以使这一工作?
发布于 2018-09-11 00:37:16
事实证明,nohup可能不是问题所在。
根据我的问题,来自nohup的R版本是Rv3.4.3,而Rscript --version则返回Rv3.3.3。这是因为在使用系统范围的R (v3.4.3)之前,我的$PATH指向我的个人R (v3.3.3)。
为什么全系统的R会被呼叫?答案在于脚本散列:
#!/usr/bin/env Rscript --vanilla
也就是说,调用/usr/bin/env Rscript --version收益率
R脚本前端版本3.4.3 (2017-11-30)
系统范围的R在我的个人库(v3.3.3)中查找glmnet,这是.libPaths()的第一个条目,从来没有为3.4.3编译过:
/usr/bin/Rscript -e ".libPaths(.libPaths()[2:3]); library('glmnet')"库中的错误(“glmnet”):没有名为“glmnet”的包
故事的寓意:当服务器上安装了多个R版本时,保持组织性!
https://stackoverflow.com/questions/52047789
复制相似问题