在命令行运行r代码时出现包错误

37

我有一些代码需要运行,其中包括以下部分:

if (!require("yaml")) {
  install.packages("yaml") 
  library("yaml")
}

当我在RStudio中运行时,一切都很顺利,没有错误。然而,当我尝试在命令行上运行我的代码时,我会得到这个错误:

$ Rscript.exe file.R
Loading required package: yaml
Installing package(s) into ‘/usr/lib/R/site-library’
(as ‘lib’ is unspecified)
Error in contrib.url(repos, type) :
  trying to use CRAN without setting a mirror
Calls: install.packages -> grep -> contrib.url
In addition: Warning message:
In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called ‘yaml’
Execution halted

2
阅读以下内容:“尝试在未设置镜像的情况下使用CRAN”,特别是“install.packages”中的“repos”参数。 - Roman Luštrik
1个回答

54

当你在RStudio中调用install.packages时,RStudio会设置一个默认的软件包库。但是当你通过命令行运行脚本时,你需要告诉R使用哪个软件包库(或设置全局默认的软件包库)。

你可以通过告诉R使用你喜欢的软件包库来轻松解决此问题。

例如,如果你想使用RStudio的软件包库,可以在install.packages调用中设置repos="http://cran.rstudio.com/"

if (!require("yaml")) {
  install.packages("yaml", repos="http://cran.rstudio.com/") 
  library("yaml")
}

这应该能够运行!


这样会给我一个错误: 加载所需的包:yaml 文件(con,“r”)中的错误:无法打开连接 执行已停止 - kng
你知道这个软件包是否已经安装了吗?你的脚本中还有其他代码吗?你尝试过创建一个测试脚本,比如 test.R,只包含一行代码 library("yaml"),来检查软件包是否能够被正确加载了吗? - ialm
出于某些原因,我认为这个错误与同样的问题有关。结果发现我之前使用了一个压制警告的包装器,隐藏了真正的问题。 - kng

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接