Как читать ввод с терминала, используя / dev / stdin и read.csv ()?

Я использую:

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

Я пытаюсь использоватьread.csv ввести небольшой фрагмент данных CSV + заголовок непосредственно с терминала.

Я столкнулся с проблемой, которая может быть связана сR пропускает строки из / dev / stdin а такжеread.csv, заголовок в первой строке, пропустить вторую строку но достаточно отличается (ответы там не объясняют того, что я вижу здесь), чтобы оправдать отдельный вопрос.

Кажется, что R пропускает строку заголовка и обрабатывает вторую строку (данные) как заголовок:

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"

Я нашел обходной путь: так как по умолчаниюread.csv имеетblank.lines.skip = TRUE, Я ставлю ввод перед некоторыми пустыми строками. 5 пустых строк перед началом ввода - это минимум, необходимый для того, чтобы все заработало как положено. Кстати, одна строка с 5 пробелами работает так же хорошо, намекая на 5-байтовый (или более) требуемый заполнитель пробелов:

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"

Вопросов:

Почему первый пример не работает, как ожидалось?Почему 5 пустых строк или пробелов необходимо (даже 4 не достаточно), чтобы это работало?Есть ли лучший способ прочитать короткий фрагмент CSV прямо из терминала? (Я знаю оscan а такжеreadLines, но мои данные уже в формате csv, поэтому я хочу сделать его как можно более простым для чтения / анализа / назначения)

Ответы на вопрос(1)

Ваш ответ на вопрос