¿Cómo leer la entrada del terminal utilizando / dev / stdin y read.csv ()?
Estoy usando:
R version 3.0.0 (2013-04-03) -- "Masked Marvel"
Platform: x86_64-pc-linux-gnu (64-bit)
Trato de usarread.csv
para ingresar un pequeño fragmento de datos CSV + encabezado, directamente desde el terminal.
Estoy encontrando un problema que puede estar relacionado conR salta líneas desde / dev / stdin yread.csv, encabezado en la primera línea, saltar la segunda línea pero es lo suficientemente diferente (las respuestas no explican lo que veo aquí) para justificar una pregunta aparte.
R parece omitir la línea del encabezado y tratar la segunda línea (datos) como encabezado:
R> d <- read.csv(file='/dev/stdin', header=TRUE)
a,b
1,2
3,4
# hit CTRL-D twice here to end the input
# (this is also unexpected:
# when reading a few lines interactively in bash, one CTRL-D suffices.
# Why is doing it twice necessary in R?)
R> d
X1 X2
1 3 4
R> colnames(d)
[1] "X1" "X2"
He encontrado una solución: ya que por defectoread.csv
tieneblank.lines.skip = TRUE
, Prefijo la entrada con algunas líneas en blanco. 5 líneas vacías antes de comenzar la entrada, parecen ser el mínimo requerido para que esto funcione como se espera. Por cierto: una sola línea con 5 espacios funciona igual de bien, insinuando un espacio en blanco de 5 bytes (o más) requerido:
R> d <- read.csv(file='/dev/stdin', header=TRUE)
a,b
1,2
3,4
# Enter CTRL-D twice here to mark the end of terminal input
R> d
a b
1 1 2
2 3 4
R> colnames(d)
[1] "a" "b"
Preguntas:
¿Por qué el primer ejemplo no funciona como se esperaba?¿Por qué se necesitan 5 líneas o espacios en blanco (incluso 4 no son suficientes) para que funcione?¿Hay una mejor manera de leer un fragmento corto de código csv directamente desde el terminal? (Se acerca descan
yreadLines
, pero mis datos ya están en formato csv, así que quiero que sea tan fácil de leer / analizar / asignar como sea posible)