如何在knitr中安装包?

时间:2015-06-05 19:26:01

标签: r markdown 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:......

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

您的问题的答案很简单,您应该设置repos选项:

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

您遇到问题是因为最初未设置存储库选项时R的默认行为是查询用户 - 当您运行代码时它无法执行此操作非交互。

更广泛地说,我会质疑你是否想在R代码中包含这类内容;在某些情况下,它可能会有问题。

  • 如果用户没有网络连接怎么办?
  • 如果它们在地理位置上距离您很远,那么您的默认存储库设置是否有意义呢?
  • 如果他们不想下载和安装(可能很大的)包裹怎么办?

我的首选做法是在运行代码的说明中指定用户应安装X,Y,Z软件包(并提供示例代码以安装它们,以防他们对R缺乏经验)。< / p>

答案 1 :(得分:1)

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

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

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