如何在 knitr 中安装软件包?

How can I install packages in knitr?

到目前为止,我一直在使用这段代码来加载 R 包和编写 .R 文件。但我正在尝试使用 knitr

rm (list=ls(all=TRUE))
kpacks <- c('ggplot2','install_github','devtools','mapdata')
new.packs <- kpacks[!(kpacks %in% installed.packages()[,"Package"])]
if(length(new.packs)) install.packages(new.packs)
lapply(kpacks, require, character.only=T)
remove(kpacks, new.packs)
options(max.print=5.5E5)

但是现在,当我将这段代码放入 Knitr 文档时,我得到了这个错误:

Error in contrib.url(repos, "source") :
  trying to use CRAN without setting a mirror calls:......

我该如何解决这个问题?

您问题的狭义答案是您应该设置 repos 选项:

options(repos=c(CRAN="<something sensible near you>"))

您遇到了这个问题,因为当最初未设置存储库选项时 R 的默认行为是查询用户——而当您以非交互方式编写 运行 代码时它无法执行此操作。

更广泛地说,我想问你是否想在你的 R 代码中包含这种东西;在某些情况下,它可能会出现问题。

  • 如果用户没有网络连接怎么办?
  • 如果他们在地理位置上离您很远以至于您的默认存储库设置没有意义怎么办?
  • 如果他们不想下载和安装(可能很大的)软件包怎么办?

我的首选做法是在 运行 的说明中指定用户应该安装包 X、Y、Z 的代码(并为他们提供安装它们的示例代码,以防他们没有经验R).

避免安装软件包的一种方法是执行类似

的操作
if(!require(package.name))
  stop("you need to install package.name")

在你的代码块中。根据您的 knitr 文档设置,这将在文档中、控制台中生成消息,或阻止文档被编织。