【发布时间】:2015-02-24 16:51:48
【问题描述】:
我想使用 Rscript 以批处理模式运行 R 文件,但它似乎没有加载我需要的库。我得到的具体错误是:
Error in library(timeSeries) : there is no package called 'timeSeries'
Execution halted
但是我确实有包 timeSeries 并且可以从命令行从 Rstudio、RGui 和 R 加载它没问题。问题似乎只存在于使用 Rscript 运行脚本时。
我的系统/环境变量配置为:
C:\Program Files\R\R-3.1.0\bin\x64 (Appended to PATH)
R_HOME = C:\Program Files\R\R-3.1.0
R_User = Patrick
我从命令行在 RStudio、RGui 和 R 中运行相同版本的 R。我还检查了这三个来源的.Library,也得到了相同的输出。
如何使用我在 R 中使用(并已安装)的软件包从命令行运行 Rscript?
编辑:
我在script.r所在目录的windows命令行中通过Rscript script.r使用Rscript。
Rscript -e print(.Library) 的输出是[1] "C:/PROGRA~1/R/R-31~1.0/library"
这与我提到的其他三个选项一致:[1] "C:/PROGRA~1/R/R-31~1.0/library"
但是,如果我把它放在我的脚本中:
print(.libPaths())
library(timeSeries) #This is the package that failed to load
我得到以下输出:
[1] "C:/Program Files/R/R-3.1.0/library"
Error in library(timeSeries) : there is no package called 'timeSeries'
Execution halted
RStudio 中的相应调用提供了包实际安装位置的附加路径:
> print(.libPaths())
[1] "C:/Users/Patrick/Documents/R/win-library/3.1" "C:/Program Files/R/R-3.1.0/library"
【问题讨论】:
-
@flodel - 按要求
-
好的...现在从
.libPaths()重新开始...您也可以在library(timeSeries)之前在script.r中添加print(.libPaths())。 -
好的,太好了!所以现在我们知道了这个问题。 Rscript 库路径未连接到包的实际安装位置(请参阅编辑),但 RStudio 和其他是。
-
所以您的快速解决方法是在调用
library(timeSeries)之前在某处添加.libPaths(c("C:/Users/Patrick/Documents/R/win-library/3.1", .libPaths()))。我不确定为什么.libPaths()首先会有所不同。如果您可以使用?.libPaths的信息找出原因以及更持久的解决方案,那就太好了。 -
是的,它有效!您想将其发布为答案吗?根据文档,永久解决方案是在环境变量
R_LIBS中设置路径。我不确定为什么路径与 RScript 而不是另一个不同。也许这是为了减少启动时间,因为相比之下 RScript 通常不会在启动时加载那么多东西。