¿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)

Respuestas a la pregunta(1)

Su respuesta a la pregunta