【问题标题】:Error when running glmnet through Rscript and nohup通过 Rscript 和 nohup 运行 glmnet 时出错
【发布时间】:2019-02-02 11:48:52
【问题描述】:

在 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 version 3.4.3 (2017-11-30)
Platform: x86_64-redhat-linux-gnu (64-bit)
Running under: CentOS Linux 7 (Core)

Matrix products: default
BLAS/LAPACK: /usr/lib64/R/lib/libRblas.so

locale:
[1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
[3] LC_TIME=en_US.UTF-8        LC_COLLATE=en_US.UTF-8    
[5] LC_MONETARY=en_US.UTF-8    LC_MESSAGES=en_US.UTF-8   
[7] LC_PAPER=en_US.UTF-8       LC_NAME=C                 
[9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] parallel  methods   stats     graphics  grDevices utils datasets 
[8] base     

other attached packages:
[1] doParallel_1.0.11 iterators_1.0.8   glmnet_2.0-16 foreach_1.4.3    
[5] Matrix_1.2-12    

loaded via a namespace (and not attached):
[1] compiler_3.4.3   codetools_0.2-15 grid_3.4.3       lattice_0.20-35 

错误文件nohup.err:

nohup: ignoring input
Loading required package: Matrix
Loading required package: foreach
Loaded glmnet 2.0-16

Loading required package: iterators
Loading required package: parallel
Error in .Fortran("get_int_parms", fdev = double(1), eps = double(1), : "get_int_parms" not available for .Fortran() for package "glmnet"
Calls: cv.glmnet -> glmnet -> glmnet.control -> .Fortran
Execution halted

Rscript --version 的输出:

R 脚本前端版本 3.3.3 (2017-03-06)

令人困惑的部分是以下命令可以正常工作:

Rscript my_glmnet_script.R

如果我从 R 中调用 source("my_glmnet_script.R"),它也运行良好。

为什么nohupglmnetRscript 表现不佳?有没有我可以加载的 R 包来完成这项工作?

【问题讨论】:

    标签: r nohup rscript glmnet


    【解决方案1】:

    原来nohup 可能不是问题所在。

    根据我的问题,nohup 的 R 版本是 R v3.4.3,而 Rscript --version 返回 R v3.3.3。这是因为在使用系统范围的 R (v3.4.3) 之前,我的 $PATH 指向我的个人 R (v3.3.3)。

    为什么会调用系统范围的 R?答案在于脚本 hash-bang:

    #!/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 版本时保持井井有条!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-09
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多