我正在使用:
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
andreadLines
,但我的数据已经是 csv 格式,所以我想让它尽可能简单地读取/解析/分配)