19

read.table()whileがタブ区切りファイル (マイクロアレイの注釈テーブルなど) を読み取ることができず、次のエラーが返されるケースをいくつか見てきました。

Error in scan(file, what, nmax, sep, dec, quote, skip, nlines, na.strings,  : 
line xxx did not have yyy elements

read.csv()エラーなしで同じファイルで完全に動作します。read.csv()の速度も より速いと思いますread.table()

さらに:read.table()私のファイルを非常に狂ったように読んでいます。100行目を読み込んでいるときにこのエラーが発生しますが、同じファイルの先頭の直後に90行目から110行目をコピーして貼り付けると、100 + 21行目(先頭にコピーされた新しい行)のエラーが発生します。その行に問題がある場合、最初に貼り付けられた行を読み取っているときにそのエラーが報告されないのはなぜですか? read.csv()エラーなしで同じファイルを読み取ることを確認します。

read.table()で動作するのと同じファイルを が読み取れない理由について何か考えはありread.csv()ますか? また、どのような場合でも使用する理由はありますread.table()か?

4

3 に答える 3

32

read.csvのかなり薄いラッパーread.tableです。read.csvに正しい引数を指定しての動作を正確に再現できなかったとしたら、私は非常に驚かれることでしょうread.table。ただし、これらの引数の一部 (引用符やコメント文字の処理方法など) によって、関数の速度と動作が大きく変わる可能性があります。

特に、これは の完全な定義ですread.csv:

function (file, header = TRUE, sep = ",", quote = "\"", dec = ".", 
    fill = TRUE, comment.char = "", ...) {
     read.table(file = file, header = header, sep = sep, quote = quote, 
        dec = dec, fill = fill, comment.char = comment.char, ...)
}

述べたように、それread.tableは特定のオプションのセットだけです。

以下のコメントで@Chaseが述べているように、のヘルプページには次のように書かれていread.table()ますDetails

read.csv と read.csv2 は、デフォルトを除いて read.table と同じです。これらは、「カンマ区切り値」ファイル (「.csv」) または (read.csv2) を読み取ることを目的としています。これは、カンマを小数点として使用し、セミコロンをフィールド区切り記号として使用する国で使用されるバリアントです。

于 2012-10-10T21:18:43.067 に答える
10

read.tableタブ区切りファイルの読み取りには使用しないでくださいread.delim。(これは単なる薄いラッパーですread.tableが、オプションを適切な値に設定します)

于 2012-10-10T23:00:18.610 に答える