2

私は使用しています:

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 からの行をスキップし、最初の行にヘッダーがあり、2 行目をスキップすることに関連している可能性がある問題が発生してい ますが、十分に異なります (ここでの回答は、ここに表示される内容を説明していません)。別の質問を保証します。

R はヘッダー行をスキップし、2 番目の (データ) 行をヘッダーとして扱うようです:

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つのスペースを含む1行でも同様に機能し、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 形式になっているため、できるだけ読み取り/解析/割り当てを簡単にしたいと考えています)
4

1 に答える 1