Uruchom skrypt R z wiersza poleceń

484

Mam plik o nazwie a.r, to ma chmodod 755,

sayHello <- function(){
   print('hello')
}

sayHello()

Jak mogę to uruchomić za pomocą wiersza polecenia?

Sait
źródło
3
Możliwy duplikat Jaki jest najlepszy sposób używania skryptów R w wierszu poleceń?
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功
5
tl; dr: wystarczy dodać jako pierwszy wiersz skryptu:#!/usr/bin/env Rscript
michael

Odpowiedzi:

671

Jeśli chcesz, aby dane wyjściowe były drukowane na terminalu, najlepiej użyć Rscript

Rscript a.R

Zauważ, że podczas korzystania z R CMD BATCH a.Rtego zamiast przekierowywania wyjścia do standardowego wyjścia i wyświetlania na terminalu zostanie utworzony nowy plik o nazwie a.Rout.

R CMD BATCH a.R
# Check the output
cat a.Rout

Inną rzeczą, na którą należy zwrócić uwagę przy użyciu Rscript, jest to, że methodsdomyślnie nie ładuje on pakietu, co może powodować zamieszanie. Więc jeśli polegasz na czymś, co zapewniają metody, będziesz chciał załadować to wprost do skryptu.

Jeśli naprawdę chcesz skorzystać ze ./a.Rsposobu wywoływania skryptu, możesz dodać odpowiedni kod #!na górze skryptu

#!/usr/bin/env Rscript
sayHello <- function(){
   print('hello')
}

sayHello()

Zwrócę też uwagę, że jeśli używasz systemu * unix, istnieje przydatny pakiet Littler , który zapewnia łatwe przesyłanie wiersza poleceń do R. Może być konieczne użycie Littlera do uruchamiania błyszczących aplikacji za pomocą skryptu? Dalsze szczegóły można znaleźć w tym pytaniu .

Dason
źródło
28
Bez #! twój wiersz poleceń próbuje uruchomić go jako skrypt wiersza poleceń, używając tego samego interpretera, który interpretuje twoje polecenia. Nie wie, że ma to być R, nawet jeśli plik kończy się na sufiksie .R lub .r. #! informuje wiersz poleceń, jaki język jest zawarty w pliku.
Spacedman,
4
Przez lata wyłapałem tutaj kilka pytań i mogłem odnieść się zarówno do Littlera, jak i do Rscript. Najważniejsze jest, aby powiedzieć ludziom, tak jak Ty, że R CMD BATCHjest to okropne. Cokolwiek poza tym ...
Dirk Eddelbuettel
@Dason Pracuję również ze skryptem R i próbuję wykonać skrypt R z programu Java i widzę błąd. Oto moje pytanie . Sprawdź, czy możesz pomóc. Korzystam z twojego przykładu funkcji hello, aby to ułatwić.
user1950349,
Czy istnieje sposób na zmodyfikowanie ścieżki biblioteki w samym poleceniu? Coś podobnego doR CMD INSTALL -l ~/R/lib-dev
mikemtnbikes
@mikemtnbikes Nie wiem o tym. Zawsze można coś dodać, aby zmienić .libPaths () w skrypcie. Ale nie widzę żadnej takiej opcji wskazanej na stronie podręcznika użytkownika Rscript.
Dason
107

To nie odpowiada bezpośrednio na pytanie. Ale ktoś może tu skończyć, ponieważ chce uruchomić oneliner R z terminala. Na przykład, jeśli chcesz po prostu zainstalować brakujące pakiety i wyjść, ten oneliner może być bardzo wygodny. Często go używam, gdy nagle dowiaduję się, że brakuje mi niektórych pakietów i chcę je zainstalować tam, gdzie chcę.

  • Aby zainstalować w domyślnej lokalizacji:

    R -e 'install.packages(c("package1", "package2"))'
  • Aby zainstalować w lokalizacji wymagającej rootuprawnień:

    R -e 'install.packages(c("package1", "package2"), lib="/usr/local/lib/R/site-library")' 
biocyberman
źródło
5
Aby uruchomić polecenie, możesz również użyć Rscript -e "getwd()"w terminalu. Rscript wydrukuje tylko wynik polecenia, a nie pełny komunikat startowy R.
Paul Rougieux,
Możesz także użyć, r -e "cat(getwd(),'\n')"jeśli masz zainstalowany Littler. W tej odpowiedzi Dirk Eddelbuettel wyjaśnia różnicę między littler a Rscript.
Paul Rougieux,
2
Dziękuję za przewidywanie mojego problemu! Potrzebowałem jeszcze jednej rzeczy:R -e 'install.packages("package", repos="http://cran.us.r-project.org")'
Erin,
4
Należy użyć R -r 'options(warn=2); install...', aby zatrzymać wykonywanie i uzyskać niezerowy kod błędu w przypadku niepowodzenia instalacji. W przeciwnym razie wszelkie install.packagesbłędy są tylko ostrzeżeniami.
rvernica
21

Potrzebujesz ?Rscriptpolecenia, aby uruchomić skrypt R z terminala.

Sprawdź http://stat.ethz.ch/R-manual/R-devel/library/utils/html/Rscript.html

Przykład

## example #! script for a Unix-alike

#! /path/to/Rscript --vanilla --default-packages=utils
args <- commandArgs(TRUE)
res <- try(install.packages(args))
if(inherits(res, "try-error")) q(status=1) else q()
Mehul Rathod
źródło
To był tylko przykład tego, jak napiszesz / uruchomisz skrypt R, w swoim pliku dodaj #! / Path / to / rscript, a następnie chmod + x <your script.r> i ./< your script.r>
Mehul Rathod,
10

Jak uruchomić Rmd w poleceniu za pomocą knitr i rmarkdown za pomocą wielu poleceń, a następnie Prześlij plik HTML do RPubs

Oto przykład: załaduj dwie biblioteki i uruchom komendę R.

R -e 'library("rmarkdown");library("knitr");rmarkdown::render("NormalDevconJuly.Rmd")'

R -e 'library("markdown");rpubsUpload("normalDev","NormalDevconJuly.html")'
Shicheng Guo
źródło
3
Zauważ, że łatwiej będzie pominąć ładowanie biblioteki; R -e 'markdown::rpubsUpload("normalDev","NormalDevconJuly.html")'
gregmacfarlane
3

Jeszcze innym sposobem korzystania z Rscript dla systemów * Unix jest Process Substitution .

Rscript <(zcat a.r)
# [1] "hello"

Co oczywiście robi to samo, co zaakceptowana odpowiedź, ale pozwala to na manipulowanie i uruchamianie pliku bez zapisywania mocy wiersza poleceń, np .:

Rscript <(sed s/hello/bye/ a.r)
# [1] "bye"

Podobnie do Rscript -e "Rcode"niego pozwala również na uruchomienie bez zapisywania w pliku. Można go więc używać w połączeniu ze skryptami generującymi kod R, np .:

Rscript <(echo "head(iris,2)")
# Sepal.Length Sepal.Width Petal.Length Petal.Width Species
# 1          5.1         3.5          1.4         0.2  setosa
# 2          4.9         3.0          1.4         0.2  setosa
Sebastian Müller
źródło
3

Tylko w celu dokumentacji czasami musisz uruchomić skrypt jako sudo:

sudo Rscript path/to/your/file.R
Cro-Magnon
źródło
2
Kiedy musisz to zrobić?
simplegamer