Как читать ввод с терминала, используя / 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  d
  X1 X2
1  3  4

R> colnames(d)
[1] "X1" "X2"

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

R> d  d
  a b
1 1 2
2 3 4

R> colnames(d)
[1] "a" "b"

Вопросы:

Почему нетt первый пример работает как положено?Зачем нужны 5 пустых строк или пробелов (даже 4Достаточно), чтобы это сработало?Есть ли лучший способ прочитать короткий фрагмент CSV прямо из терминала? (Я знаю оscan а такжеreadLines, но мои данные уже в формате csv, поэтому я хочу сделать его как можно более простым для чтения / анализа / назначения)
 arielf11 мая 2013 г., 18:09
Спасибо @nograpes! Можете ли вы написать короткий ответ с рабочим примером? Я'Я с радостью приму это. 1-я ссылка показывает, что буфер 4 КБ находится "съедена» в то время как в этом случае нужны только 5 байтов, так что, похоже, это две разные проблемы. Кроме того: этот пример гораздо более минималистичен и может быть более полезным.
 nograpes11 мая 2013 г., 07:28
Я думаю, что ответ в первой ссылке, которую вы разместили, может быть применим. R появляется, чтобы создать 4-байтовый буфер на/dev/stdin, Также, как уже упоминалось в комментарии, вы можете использоватьstdin вместо этого, и, кажется, работает нормально. (Хотя я до сих пор нене понимаю, почему вы должны нажать Ctrl + D дважды).

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

Решение Вопроса

Я думаю, что ответ в первой ссылке, которую вы разместили, может быть применим. Похоже, R создает 4-байтовый буфер в / dev / stdin. Кроме того, как уже упоминалось в комментарии, вы можете использовать вместо него стандартный ввод, и, похоже, он работает нормально. (Хотя я до сих пор нене понимаю, почему вы должны нажать Ctrl + D дважды).

d  d
  a b
1 1 2
2 3 4
 nograpes15 мая 2013 г., 19:03
@arielf Да, я подозреваю то же самое ... но люди из R dev довольно обидчивы, когда дело доходит до сообщения об ошибках вbase, Поэтому вам лучше убедиться, что вы провели исследование, прежде чем сообщать об этом.
 arielf15 мая 2013 г., 00:20
Спасибо. Этот обходной путь работает. Мне просто интересно, еслиSTDIN' вести себя иначе, чем/ DEV / STDIN' ISN»ошибка в подсистеме R io. Я никогда не видел / dev / stdin ' неправильно себя ведёт с помощью других программ. Также требуемый двойной CTRL-D беспокоит меня немного.

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