0

ですから、友人にRコードを手伝ってもらったのですが、コードが機能するので質問が苦手ですが、コードを理解して変更するのに苦労し、コードが正しくない、または適切ではないと感じています。

x1、x2...xNなどのラベルが付いた個別のRデータフレームにファイルをロードしています。

データフレームを結合したいのですが、これが私たちが機能するようになったコードです。

assign("x",eval(parse(text=paste("rbind(",paste("x",rep(1:length(toAppend)),sep="",collapse=", "),")",sep=""))))

「toAppend」は、x1、x2などのデータフレームにロードされたファイルのリストです。

トリックをコード化するためのすべてのテキストがなければ、次のようになります。

x <- rbind(##x1 through xN or some loop for 1:length(toAppend)#)

なぜRはevaluatetextトリックなしでコードを取得できないのですか?これは良いコードですか?このIRLを使用すると解雇されますか?代わりにこれをループとして書き出す適切な方法を知っていますか?ループなしでそれを行う方法はありますか?これらのファイル/データフレームを組み合わせると、3000万行を超えるデータセットが作成され、ループの使用には非常に時間がかかります。サンプルのコード行を実行して、最大400個のファイルから30M行のデータセットを取得するには、24時間以上かかります。

4

1 に答える 1

2

read.tableこれらのデータフレームがすべて同じ構造を持っている場合、またはステップに 'colClasses' 引数を使用することでかなりの時間を節約できread.csvます。lapply関数はこれを関数に渡すことができます。read.*実際に何をしていたかについて Dason の推測を使用すると、次のようになります。

 x <- do.call(rbind, lapply(file_names, read.csv, 
                                colClasses=c("numeric", "Date", "character")
               ))   # whatever the ordered sequence of classes might be

文字ベクトルを取得できない理由rbindは、オブジェクトの名前が「言語」オブジェクトであり、文字ベクトルが言語タイプではないためです。R で「言語」と「データ」を分離する半透膜を介して文字ベクトルをプッシュするにはassign、 、do.call eval(parse())または環境、参照クラス、またはおそらく私が忘れていた他の方法を使用する必要があります。

于 2013-01-09T03:34:27.140 に答える