Używałem R CMD BATCH my_script.R
z terminala do wykonania R
skryptu. Jestem teraz w punkcie, w którym chciałbym przekazać argument do polecenia, ale mam pewne problemy z jego działaniem. Jeśli robię R CMD BATCH my_script.R blabla
wtedy blabla
staje plik wyjściowy, zamiast interpretować jako argument dostępnych skrypt R jest wykonywany.
Próbowałem, Rscript my_script.R blabla
co wydaje się blabla
poprawnie przekazywać jako argument, ale potem nie otrzymuję my_script.Rout
pliku wyjściowego, który otrzymuję R CMD BATCH
(chcę .Rout
plik). Chociaż mógłbym przekierować dane wyjściowe wywołania do Rscript
wybranej przeze mnie nazwy pliku, nie otrzymywałbym poleceń wejściowych R zawartych w pliku w taki R CMD BATCH
sam sposób, jak w .Rout
pliku.
Idealnie więc szukam sposobu na przekazanie argumentów do skryptu języka R wykonywanego za pomocą R CMD BATCH
metody, chociaż byłbym zadowolony z podejścia wykorzystującego, Rscript
jeśli istnieje sposób, aby wygenerować porównywalny .Rout
plik.
R CMD BATCH
to relikt. Podoba mi się jednak to, że tworzy.Rout
plik, który zawiera nie tylko dane wyjściowe skryptu, ale także przeplata polecenia / komentarze wejściowe z.R
pliku skryptu, który wygenerował te dane wyjściowe.R CMD BATCH
.R CMD BATCH
zknitr
npRscript -e "knitr::stitch(commandArgs(TRUE)[1])" my_script.R
(można zastąpićstitch
zstitch_rhtml
lubstitch_rmd
i trzeba zainstalowaćknitr
z Github ponieważ właśnie znalazłeś błąd wstitch
...)Rscript myfile.R > path/to/mylog.Rout
i zamiast być wypisywanym na standardowe wyjście (ekran), wynik pliku jest zapisywany w twoim.Rout
pliku.Rscript myfile.R | tee mylog.Rout
Po wypróbowaniu opisanych tutaj opcji znalazłem ten post od Forester w r-blogerach. Myślę, że to dobra opcja do rozważenia.
Tutaj umieściłem jego kod:
Z wiersza poleceń
Test.R
W test.out
Dzięki Forester !
źródło
--args
jest kluczem. Działa również zR --no-save --no-restore --args a=1 < test.R
iR --no-save --no-restore < test.R --args a=1
Musisz umieścić argumenty przed
my_script.R
i użyć-
na argumentach, npcommandArgs()
otrzyma-blabla
w tym przypadku jako ciąg znaków. Zobacz pomoc, aby uzyskać szczegółowe informacje:źródło
args <- commandArgs(FALSE)
, a następnie wydrukować argumenty, ja skończyć z wszystkich argumentów, w tym te, które nie są moje, jak--restore
,--save
itp Jeśli używamcommandArgs(TRUE)
mam żadnych argumentów w ogóle. Czy jest sposób, aby uzyskać tylko własne dodatkowe argumenty?--args
wygląda obiecująco, ale nie udało mi się go uruchomić ...W twoim skrypcie R o nazwie
test.R
:Z wiersza poleceń uruchom:
Twój plik wyjściowy, test.Rout, pokaże, że argument
4
został pomyślnie przekazany do R:źródło
Dodaję odpowiedź, ponieważ uważam, że rozwiązanie jednokreskowe jest zawsze dobre! Na górze
myRscript.R
pliku dodaj następujący wiersz:Następnie prześlij swój skrypt z czymś takim:
Na przykład:
Następnie:
źródło
Oto inny sposób przetwarzania argumentów wiersza poleceń przy użyciu
R CMD BATCH
. Moje podejście, które opiera się na wcześniejszej odpowiedzi tutaj , pozwala określić argumenty w wierszu poleceń i, w skrypcie R, podać niektóre lub wszystkie z nich wartości domyślne.Oto plik R, który nazywam test.R :
W wierszu poleceń, jeśli piszę
wtedy w R będziemy mieli
a
=2
ib
=c(2,5,6)
. Ale mógłbym powiedzieć, pominąćb
i dodać kolejny argumentc
:Następnie w R będziemy mieć
a
=2
,b
=c(1,1,1)
(domyślnie) ic
="hello"
.Wreszcie, dla wygody, możemy zawinąć kod R w funkcję, o ile uważamy na środowisko:
źródło