いくつかの非常に大きな区切りのデータファイルがあり、Rの特定の列のみを処理したいを作成するのに時間とメモリを使用せずにdata.frame
ファイル全体。
私が知っている唯一のオプションはread.table
これは、列が2、3個しか必要ない場合や、低すぎると思われるscan
の場合は非常に無駄です。
純粋なRを使用するか、他のシェルスクリプトを呼び出して列抽出を実行し、その出力でscanまたはread.tableを使用する、より良いオプションがありますか? (シェルスクリプトを呼び出してその出力をRでキャプチャする方法の質問につながるのはどれですか?)。
タブ区切りファイルにデータがある場合、時々次のようなことをします。
df <- read.table(pipe("cut -f1,5,28 myFile.txt"))
これにより、cut
がデータ選択を行うことができます。これは、多くのメモリをまったく使用せずに実行できます。
"NULL"
へのcolClasses
引数でread.table
を使用して、純粋なRバージョンについては、 限られた数の列のみを読み取る を参照してください。
1つの可能性は、ファイル名の代わりにpipe()
を使用し、awk
または同様のフィルターで必要な列のみを抽出することです。
pipe
および友人の詳細については、help(connection)
を参照してください。
編集:colClassesについて非常に明確な場合、read.table()
もこれを行うことができます-特定の列のNULL値は、列全体をスキップします。 help(read.table)
を参照してください。そこで、追加のパッケージやツールなしでベースRにソリューションがあります。
ダークのアプローチは簡単であり、高速だと思います。私が使用した別の方法は、read.table()よりもはるかに速くロードするsqliteにデータをロードしてから、必要なものだけを引き出すことです。パッケージsqldf()により、これはすべて非常に簡単になります。 リンクはこちら sqldf()のコード例を提供する以前のスタックオーバーフローへの回答。
これはおそらく必要以上のものですが、非常に大きなデータセットを操作している場合は、 HadoopStreamingパッケージHadoop を使用してmap-reduceルーチンを提供します。