いくつかのケースで、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
_のfull定義です。
_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)を読み取るためのもので、小数点としてコンマを使用し、フィールドセパレータとしてセミコロンを使用する国で使用されています。
タブ区切りファイルの読み取りにread.table
を使用しないでください。read.delim
を使用してください。 (これはread.table
の薄いラッパーですが、オプションを適切な値に設定します)
read_table()
は、タブsep
'ed file and setting sep='\s+'
は、テーブルのアイテムにスペースがないと想定するのに役立ちます