not mutate library could r shell pipe

mutate - Piping stdin a R



in r (3)

Esto es lo más fácil que he found (asumiendo una entrada numérica):

x <- scan(file="stdin", quiet=TRUE)

Puedes probarlo con:

$ echo -e "1/n2/n3" | R --slave -e ''x <- scan(file="stdin", quiet=TRUE); summary(x)'' Min. 1st Qu. Median Mean 3rd Qu. Max. 1.0 1.5 2.0 2.0 2.5 3.0

Estoy teniendo problemas para canalizar stdin a un script R

Aquí está mi test.R script de test.R :

#!/usr/bin/env Rscript while(length(line <- readLines(''stdin'', n=1, warn=FALSE)) > 0) { write(line, stderr()) # process line }

Me gustaría pasar por cada línea y hacer un poco de procesamiento. Aquí está mi archivo de input llamado input :

aaaaaa bbbbbb cccccc dddddd eeeeee ffffff

Si lo hago

cat input | test.R

Solo me sale

aaaaaa

¿Hay algo que me perdí?


Esto no sucede si abres explícitamente la conexión estándar.

#!/usr/bin/env Rscript f <- file("stdin") open(f) while(length(line <- readLines(f,n=1)) > 0) { write(line, stderr()) # process line }


Jeff y yo escribimos littler para hacer solo esto (y algunas otras cosas). Debido a littler , nunca miré de cerca a Rscript, pero en principio esto debería funcionar bien.

Aquí está uno de nuestros primeros ejemplos, utilizando la salida de /bin/ls (y un filtro rápido por awk ) para resumir el tamaño del archivo:

edd@max:~/svn/littler/examples$ ls -l /boot/ | / awk ''!/^total/ {print $5}'' | ./fsizes.r Min. 1st Qu. Median Mean 3rd Qu. Max. 24 130300 730700 3336000 4527000 14670000 The decimal point is 6 digit(s) to the right of the | 0 | 0000000000000011111111122777777777 2 | 777777777 4 | 555577777 6 | 8 | 10 | 12 | 5 14 | 24466677 edd@max:~/svn/littler/examples$

Aquí el script fsizes.r es solo tres líneas:

edd@max:~/svn/littler/examples$ cat fsizes.r #!/usr/bin/r -i fsizes <- as.integer(readLines()) print(summary(fsizes)) stem(fsizes) edd@max:~/svn/littler/examples$