Jak odczytać dane wejściowe z terminala za pomocą / dev / stdin i read.csv ()?

Używam:

R version 3.0.0 (2013-04-03) -- "Masked Marvel"
Platform: x86_64-pc-linux-gnu (64-bit)

Próbuję użyćread.csv aby wprowadzić mały fragment kodu CSV + nagłówek, bezpośrednio z terminala.

Napotykam problem, który może być związany zR pomija linie z / dev / stdin iread.csv, nagłówek w pierwszej linii, pomiń drugą linię ale jest na tyle inny (odpowiedzi tam nie wyjaśniają tego, co tu widzę), aby uzasadnić osobne pytanie.

R wydaje się pomijać nagłówek i traktować drugą linię (dane) jako nagłówek:

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"

Znalazłem obejście: domyślnieread.csv mablank.lines.skip = TRUE, Poprzedzam wejście kilkoma pustymi liniami. 5 pustych wierszy przed uruchomieniem wejścia wydaje się być minimalnym wymaganym do uruchomienia go zgodnie z oczekiwaniami. BTW: pojedyncza linia z 5 spacjami działa równie dobrze, wskazując na jakieś 5 bajtów (lub więcej) wymaganego dopełnienia białych znaków:

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"

Pytania:

Dlaczego pierwszy przykład nie działa zgodnie z oczekiwaniami?Dlaczego potrzeba 5 pustych linii lub spacji (nawet 4 nie wystarczą), aby to działało?Czy istnieje lepszy sposób na odczytanie krótkiego fragmentu kodu CSV bezpośrednio z terminala? (Wiem oscan ireadLines, ale moje dane są już w formacie csv, więc chcę sprawić, aby czytanie / parsowanie / przypisywanie było możliwie proste)

questionAnswers(1)

yourAnswerToTheQuestion