Запуск Rscript в командной строке и загрузка пакетов

У меня есть файл foo.R, который содержит

library("ggplot2")
cat("Its working")

Я пытаюсь запустить foo.r через командную строку, используя команду Rscript commandRscript --default-packages=ggplot2 foo.R, и это дает мне следующую ошибку:

1: In library(package, lib.loc = lib.loc, character.only = TRUE, logical.return = TRUE,  :
  there is no package called ‘ggplot2’
2: package ‘ggplot2’ in options("defaultPackages") was not found 
Error in library("ggplot2") : there is no package called ‘ggplot2’
Execution halted

Любая помощь в загрузке пакетов во время работы "Rscript" приветствуется.


person kasun61    schedule 17.06.2015    source источник
comment
Запустите Rscript -e 'cat(c(.libPaths(), installed.packages()[,1]), sep = "\n")' и сравните его с тем, что вы получите, запустив его в интерактивном сеансе. Иногда Rscript использует другой бэкэнд R и/или набор библиотек, чем вы ожидаете.   -  person nrussell    schedule 17.06.2015
comment
Rscript foo.R работает?   -  person cory    schedule 17.06.2015
comment
Чтобы это заработало, мне пришлось войти в R на сервере (user@servername:~$ R), а затем выполнить «›install.packages(ggplot2)». Это установило пакет, и теперь я могу запустить предыдущую команду Rscript. . Я тестировал свой код на RStudio, поэтому не смог запустить через терминал. Спасибо, ребята, буду держать в курсе, если у меня возникнут другие проблемы.   -  person kasun61    schedule 17.06.2015


Ответы (2)


Для будущих ссылок вы можете использовать функцию require вместо library, чтобы избежать этой ошибки: require просто возвращает FALSE и выдает предупреждение, если пакет не установлен, а не выдает ошибку. Поэтому вы можете сделать конструкцию следующим образом:

if(!require(ggplot2)){install.packages("ggplot2")}

Что он делает, так это пытается загрузить пакет и, если он не установлен, устанавливает его.

person plannapus    schedule 22.06.2015

Или вы могли бы использовать это,

# --------- Helper Functions ------------ #
# Ref: https://gist.github.com/smithdanielle/9913897
# check.packages function: install and load multiple R packages.
# Check to see if packages are installed. Install them if they are not, then load them into the R session.
check.packages <- function (pkg) {
  print("Installing required packages, please wait...")
  new.pkg <- pkg[!(pkg %in% installed.packages()[, "Package"])]
  if (length(new.pkg)) {
    install.packages(new.pkg, dependencies = TRUE)
  }
  sapply(pkg, library, character.only = TRUE)
}

# Usage example
# packages<-c("ggplot2", "afex", "ez", "Hmisc", "pander", "plyr")
# check.packages(packages)

check.packages("tidyverse")
person Majeed Siddiqui    schedule 25.04.2018