2014-04-01 25 views
7

Widzę, jak mieć Rscript wykonać operacje, które chcę, podając nazwę pliku jako argument, np. jeśli moja Rscript nazywa script i zawiera:Mieć odczyt Rscript lub wziąć dane wejściowe ze stdin

#!/usr/bin/Rscript 
path <- commandArgs()[1] 
writeLines(readLines(path)) 

Następnie można uruchomić z wiersza poleceń bash:

Rscript script filename.Rmd --args dev='svg' 

i skutecznie uzyskać zawartość filename.Rmd echo z powrotem do mnie. Jeśli zamiast przechodzenia powyższy argument nazwę pliku jak filename.Rmd Chcę przekazać mu tekst z stdin staram modyfikując mój skrypt czytać ze standardowego wejścia:

#!/usr/bin/Rscript 
writeLines(file("stdin")) 

ale nie wiem, jak zbudować połączenie poleceń dla tego walizka. Próbowałem instalacji z treścią:

cat filename.Rmd | Rscript script --args dev='svg' 

i również próbował przekierowanie:

Rscript script --args dev='svg' < filename.Rmd 

i albo sposób pojawia się błąd:

Error in writeLines(file("stdin")) : invalid 'text' argument 

(Próbowałem zostały również open(file("stdin"))). Nie jestem pewien, czy niepoprawnie konstruuję Rscript, czy niepoprawnie argument wiersza poleceń, czy jedno i drugie.

+1

możliwe duplikat [rurociągów stdin do R] (http://stackoverflow.com/questions/9370609/piping-stdin-to-r) – hrbrmstr

+1

ale twój błąd może być używany do 'writeLines' czytaj vs "readLines" – hrbrmstr

+0

Dzięki; używanie 'readLines (file (" stdin "))' zamiast 'open (file (" stdin "))' rozwiązuje mój problem. – cboettig

Odpowiedz

7

Musisz przeczytać tekst z połączenia utworzonego przez file("stdin"), aby przekazać coś użytecznego do argumentu text z writeLines(). To powinno działać

#!/usr/bin/Rscript 
writeLines(readLines(file("stdin"))) 
Powiązane problemy