Как читать ввод с терминала, используя / 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, поэтому я хочу сделать его как можно более простым для чтения / анализа / назначения)