2014-04-01 3 views
7

Ich sehe, wie ein Rscript führen die Operationen, die ich will, wenn ein Dateiname als ein Argument, z. wenn meine Rscript script genannt wird und enthält:Lassen Sie ein Rscript lesen oder eine Eingabe von stdin nehmen

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

Dann kann ich aus der Bash-Befehlszeile ausführen:

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

und erfolgreich den Inhalt filename.Rmd wieder aus mir Echo erhalten. Wenn stattdessen die obige Argument wie filename.Rmd einen Dateinamen von geben ich möchte es passieren Text von stdin, ich versuche zu modifizieren mein Skript von stdin zu lesen:

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

aber ich weiß nicht, wie das Kommandozeilen-Aufruf für diese konstruieren Fall. Ich habe versucht, Rohrleitungen in dem Inhalt:

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

und auch versucht, Umleitung:

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

und so oder so bekomme ich den Fehler:

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

(Ich habe auch versucht open(file("stdin"))). Ich bin mir nicht sicher, ob ich das Rscript falsch oder das Befehlszeilenargument falsch oder beides konstruiere.

+1

möglich Duplikat [Piping stdin R] (http://stackoverflow.com/questions/9370609/piping-stdin-to-r) – hrbrmstr

+1

aber Ihren Fehler könnte mit 'writeLines' zu lesen vs 'readLines' – hrbrmstr

+0

Danke; mit 'readLines (file (" stdin "))' anstelle von 'open (file (" stdin "))' löst mein Problem. – cboettig

Antwort

7

Sie müssen Text aus der Verbindung lesen, die von file("stdin") erstellt wurde, um alles zu übergeben, das für das text Argument von writeLines() nützlich ist. Dies sollte funktionieren

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