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

时间:2015-04-14 11:56:57

标签: 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")
......

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

# 1) no specification of packages in the batch file  
Rscript.exe file.R arg1 arg2 arg3 > outputFile.Rout 2>&1

但是,如果我在批处理文件中添加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

使用file.R的{​​{1}}部分不再有效(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

--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

中相同的错误

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

3 个答案:

答案 0 :(得分:6)

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

的简单测试脚本来看到这一点

在档案“env.R”中:

sessionInfo()

来自终端的电话: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 

现在我修改了这个电话: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 

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

RScript --default-packages=stats,graphics,grDevices,utils,datasets,base,methods env.R

我也在那里扔方法。

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

答案 1 :(得分:4)

为了完整性并说明我的评论,Charles的示例使用littler在一行中为我工作。我在这里仅仅是为了阐述这一行:

edd@max:~$ r -ldplyr -e'iris %>% \
                        group_by(Species) %>% \         
                        summarise(mean(Sepal.Length)) %>% \
                        print'
Source: local data frame [3 x 2]

     Species mean(Sepal.Length)
1     setosa              5.006
2 versicolor              5.936
3  virginica              6.588
edd@max:~$ 

正如我所说,这确实是一行(而r想要明确print)的一个区别。

但正如您所见,datasets包也由r自动加载。

答案 2 :(得分:0)

您可以尝试以下测试吗?我无法在评论中说明这一点。这在我的系统上运行良好。

test.R

library(dplyr)

data(iris)

iris %>%
group_by(Species) %>%
summarise(mean(Sepal.Length))

在您的终端中:

Rscript --default-packages=utils,datasets,dplyr test.R