install.packages fails in knitr document: "trying to use CRAN without setting a mirror"

Locksmith picture Locksmith · Nov 28, 2015 · Viewed 71.2k times · Source

Using the following code I got the data I wanted, but for some reason I can't figure out knitr doesn't let me compile a PDF document, as shown further below:

My code:

install.packages("weatherData")
library(weatherData)
istanbul <- getWeatherForDate("Istanbul",
                              start_date = Sys.Date() - 41, 
                              end_date = Sys.Date())

Works out with no problem but I get the following message trying compile the PDF:

Quitting from lines 3-31 (ist_weather.spin.Rmd) 
Error in contrib.url(repos, type) : 
  trying to use CRAN without setting a mirror
Calls: <Anonymous> ... eval -> eval -> install.packages -> grep -> contrib.url
Execution halted

Answer

scoa picture scoa · Nov 28, 2015

Knitr produces a R session, without a default cran mirror unless you specifically asked for one. We tend to forget we need to set up CRAN for every R session when we use Rstudio because it takes care of it, but only for interactive use, not for knitr.

You could try specifying a mirror as a install.packages argument:

install.packages("weatherData",repos = "http://cran.us.r-project.org")

Alternatively, you could set up your default CRAN mirror in your .Rprofile. See this answer.

That said, it is not a good idea to install packages through a knitr document that you will probably compile several times. You should assume people know how to install a missing package if needed, or at least test whether the package is installed before installing it again

if(!require(weatherData)) install.packages("weatherData",repos = "http://cran.us.r-project.org")