Rscript和Packages:如何以及何时确定加载了哪些包?

rmu*_*uc8 5 r batch-file rscript

我想执行一个脚本file.R使用Rscript.在file.R,我使用包dplyr.

# file.R
df <- data.frame(ID,x,y,z,...)
library(dplyr)
filter(df, ID != "null")
......
Run Code Online (Sandbox Code Playgroud)

如果我没有在批处理文件中指定任何选项,则一切正常,因为file.R包含该行library(dplyr)

# 1) no specification of packages in the batch file  
Rscript.exe file.R arg1 arg2 arg3 > outputFile.Rout 2>&1
Run Code Online (Sandbox Code Playgroud)

但是,如果我添加default-packages=utils批处理文件,

# 2) specification of packages utils in the batch file
Rscript.exe  default-packages=utils file.R arg1 arg2 arg3 > outputFile.Rout 2>&1
Run Code Online (Sandbox Code Playgroud)

部分file.R使用dplyr不工作了(Error in filter(df, ID != 'null') : Object 'ID' could not be found)

自从?Rscript

--default-packages=list
where list is a comma-separated list of package names or NULL
Run Code Online (Sandbox Code Playgroud)

我尝试添加--default-packages=utils,dplyr,

# 3) specification of packages utils and dplyr in the batch file
Rscript.exe  default-packages=utils,dplyr file.R arg1 arg2 arg3 > outputFile.Rout 2>&1
Run Code Online (Sandbox Code Playgroud)

导致与...相同的错误 2

为什么批处理文件1是唯一有效的?我在所有3个替代方案中调用相同的R脚本.

Das*_*son 6

--default-packages参数指定默认情况下要加载的包.它不会添加到默认包列表中 - 它会替换列表.这意味着您还需要指定您依赖的所有其他基础包.你可以通过制作一个调用的简单测试脚本来看到这一点sessionInfo()

在文件"env.R"中:

sessionInfo()
Run Code Online (Sandbox Code Playgroud)

来自终端的电话: Rscript env.R

R version 3.1.2 (2014-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] stats     graphics  grDevices utils     datasets  base 
Run Code Online (Sandbox Code Playgroud)

现在我修改那个电话: Rscript --default-packages=utils env.R

R version 3.1.2 (2014-10-31)
Platform: x86_64-w64-mingw32/x64 (64-bit)

locale:
[1] LC_COLLATE=English_United States.1252 
[2] LC_CTYPE=English_United States.1252   
[3] LC_MONETARY=English_United States.1252
[4] LC_NUMERIC=C                          
[5] LC_TIME=English_United States.1252    

attached base packages:
[1] utils base 
Run Code Online (Sandbox Code Playgroud)

所以你需要指定其他缺少的包.

RScript --default-packages=stats,graphics,grDevices,utils,datasets,base,methods env.R
Run Code Online (Sandbox Code Playgroud)

我也在那里扔方法.

有了这个说,如果你刚用RScript运行时没有任何问题,我不明白你为什么要试图搞乱default-packages参数.看起来你只是为自己创造问题,除非你有其他问题试图解决,而你没有告诉我们.