14

CSVファイルの 1 列をRできるだけ早く読み込もうとしています。列を RAM に入れるのにかかる時間を 10 分の 1 にするという点で、標準的な方法を削減したいと考えています。

私の動機は何ですか?2 つのファイルがあります。1 つMain.csvは 300000 行 500 列、もう 1 つSecond.csvは 300000 行 5 列です。system.time()コマンドの場合read.csv("Second.csv")、2.2 秒かかります。以下の 2 つの方法のいずれかを使用して の最初の列Main.csv(5 列ではなく 1 列であるため、20% のサイズ)を読み取るSecond.csvと、40 秒以上かかります。これは、600 メガバイトのファイル全体を読み取るのにかかる時間と同じです。明らかに受け入れられません。

  • 方法 1

    colClasses <- rep('NULL',500)
    
    colClasses[1] <- NA
    system.time(
    read.csv("Main.csv",colClasses=colClasses)
    ) # 40+ seconds, unacceptable
    
  • 方法 2

     read.table(pipe("cut -f1 Main.csv")) #40+ seconds, unacceptable
    

この時間を短縮するには?私はR解決策を望んでいます。

4

2 に答える 2

14

私は提案します

scan(pipe("cut -f1 -d, Main.csv"))

これは、いくつかの点で元の提案 ( read.table(pipe("cut -f1 Main.csv"))) とは異なります。

  • ファイルはカンマ区切りでcutあり、デフォルトでタブ区切りを想定しているd,ため、カンマ区切りを指定するように指定する必要があります
  • scan()read.table単純な/非構造化データの読み取りよりもはるかに高速です。

OP のコメントによると、これには 40 秒以上ではなく約 4 秒かかります。

于 2013-11-02T16:36:06.887 に答える