我想使用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脚本。
答案 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