2014-11-18 3 views
4

Я пытаюсь реализовать редуктор для потоковой передачи Hadoop с использованием R. Однако мне нужно выяснить способ доступа к некоторым библиотекам, которые не построены в R, dplyr..etc. На основании моих исследований кажется, есть два подхода:R установить пакеты из Shell

(1) В коде редуктора, установить необходимые библиотеки во временную папку, и они будут захоронены, когда сессия будет сделано, как это:

.libPaths(c(.libPaths(), temp <- tempdir())) 
install.packages("dplyr", lib=temp, repos='http://cran.us.r-project.org') 
library(dplyr) 
... 

Однако этот подход будет иметь значительные накладные расходы в зависимости от того, сколько библиотек вы пытаетесь установить. Поэтому большая часть времени будет потрачена впустую на установку библиотек (сложные библиотеки, такие как dplyr, имеют множество зависимостей, которые потребуют минут для установки на сеансе ванили R).

Похоже, мне нужно установить его перед рукой, что заставляет нас приблизиться2.

(2) Мое кластер довольно большой. И я должен использовать какой-то инструмент вроде Ansible, чтобы он работал. Поэтому я предпочитаю иметь одну команду оболочки Linux для установки библиотеки. Я видел R CMD INSTALL... раньше, однако он чувствует, что будет устанавливать пакеты только из исходного файла вместо того, чтобы делать install.packages() в консоли R, вычислять зеркало, вытаскивать исходный файл, устанавливать его в одну команду.

Может ли кто-нибудь показать мне, как использовать одну командную строку в оболочке для неинтерактивной установки пакета R? (извините за это много фоновых знаний, если кто-то думает, что я даже не после правильного ФИЛОСОФИЯ, не стесняйтесь оставить в комментариях, как весь этот пакет кластера R должен управляться.)

ответ

2

Вы можете найти littler полезного. Это интерфейс/вариант командной строки R (который использует интерфейс R-внедрения).

Я использую сценарий install.rвсе время для установки пакета из оболочки. Существует second variant with more command-line argument parsing, но он имеет дополнительную зависимость.

3

В то время как Dirk's littler выглядит довольно интересно, я нахожу его не таким простым, как это могло бы быть, потому что вам нужно развернуть скрипт install.r, чтобы использовать эту функцию. Это не проблема при работе в интерактивном режиме, но для сценария автоматической установки он добавляет некоторые накладные расходы - возможно, Dirk может добавить некоторые примеры для этого.

Так альтернатива:

Rscript -e 'install.packages("drat", repos="https://cran.rstudio.com")' 
+1

Я не понимаю вашу точку - 'install.r' приходит с Литтлером, и мы, как правило, просто установить в' мягкую ссылку/USR/местные/bin'. Тогда это просто 'install.r drat'. И для чего это стоит, мы используем 'install.r' и' install2.r' (с поддержкой опций командной строки) много для рокера для этого. См., Например, [этот файл докеров] (https://github.com/rocker-org/hadleyverse/blob/master/Dockerfile). –

Смежные вопросы