1. ホーム
  2. r

[解決済み] read.csvとread.tableの比較

2022-02-28 07:55:06

質問

いくつかのケースで read.table() は、タブ区切りファイル(例えばマイクロアレイのアノテーションテーブル)を読み込むことができず、以下のエラーを返します。

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() はどのような場合にも対応できるのでしょうか?

どのように解決するのですか?

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と同じです。これらは、'comma separated value' ファイル ('.csv') または (read.csv2) を読むためのもので、小数点にカンマ、フィールドの区切りにセミコロンを使う国で使用されているバージョンです。