2012-10-10 8 views
13

read.csv対私はしばらくの間<code>read.table()</code>は、タブ区切りファイル(マイクロアレイの例えば注釈テーブル)、次のエラーを返す読み取ることができないことを、いくつかの例で見てきた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()を使用する理由はありますか?

+1

はまた、読み取りなかった(これはread.table周りだけ薄いラッパーですが、それは適切な値にオプションを設定します)メモリ使用量の 'read.table()'のヘルプページは、なぜ大容量のファイルでは遅く見えるかもしれないのかを示しています。 – Chase

+1

再現可能な例がなくても(更新された)質問に答えることはできません。最も一般的な読み込みの問題は、(1)検出されなかったコメント文字、(2)不一致の引用符、(3) 'fill = TRUE'のときにファイルの最初の5行の後の1行あたりのフィールド数の変化です。 'read.csv'と' read.table'は 'comment'、' quote'、 'fill'のデフォルト値が違うので、これらのいずれかが問題になる可能性があります。 –

+1

PSには、 'comment' /' quote'/'fill'の8つの組み合わせがあります。それらをすべて試して結果がどのように違うのか見ることができます。 'count.fields()'は診断にも便利です。 –

答えて

26

read.csvは、かなり薄いラッパーですread.table; read.tableに正しい引数を指定して、read.csvの動作を正確に再現できない場合、私は非常に驚いています。しかし、それらの引数のいくつか(引用符やコメント文字の扱い方など)は、関数の速度や振る舞いをうまく変更する可能性があります。特に

、これはread.csvいっぱいな定義である:それはちょうどread.tableオプションの特定のセットを持つのです述べたように

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, ...) 
} 

下のコメント欄で@Chase状態として

read.table()のヘルプページには、同じくらいDetails下に書かれています:

read.csv and read.csv2 are identical to read.table except for the defaults. They are intended for reading ‘comma separated value’ files (‘.csv’) or (read.csv2) the variant used in countries that use a comma as decimal point and a semicolon as field separator.

+6

良い答え - 私は、' read.table() 'のヘルプページは、' read.csvとread.csv2がread.tableと全く同じであることを示していますデフォルト。これらはカンマを小数点として、セミコロンをフィールドセパレータとして使用する国で使用されている「カンマ区切り値」ファイル( '.csv')または(read.csv2)を読み込むためのものです。だからOP - yesに、あなたのデータが 'read.csv'のデフォルト値と一致しないとき' read.table'が必要になります – Chase

+0

ただ質問を更新しました – Ali

8

read.delimを使用して、タブ区切りのファイルを読むためにread.tableを使用しないでください。

0

read_table()タブsep「EDファイルにいつか失敗しないとsep='\s+'を設定すると、テーブル内の項目を想定して助けることはスペース

関連する問題

 関連する問題