Uruchom skrypt R z wiersza poleceń


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 .


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")' 

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()

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")'

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

3

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

sudo Rscript path/to/your/file.R

2
Kiedy musisz to zrobić?
simplegamer
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.