2017-08-22 7 views
0

と同じである1行のデータフレームを作成します。すべての列は、私はしばしばこのようなコードを記述し、既存の変数

answer.df = data.frame(x = numeric(0), y = numeric(0), z = numeric(0)) 
for (i in 1:100) { 
    x = do_stuff(i) 
    y = do_more_stuff(i) 
    z = yet_more_stuff(i) 

    # Is there a better way of doing this: 
    temp.df = data.frame(x = x, y = y, z = z) 

    answer.df = rbind(answer.df, temp.df) 
} 

私の質問は、ラインtemp.df = data.frame(x = x, y = y, z = z)でやっての滑らかな印象方法があるさをこの?私の問題を理解するには、10個以上の変数があると想像してください。

+2

が直接あなたの問題を答えていない、しかし、aは(ほとんど常に)、多くの場合があります:

do.call("rbind", lapply(1:100, function(i) list(x = xfun(i), y = yfun(i)))) 

また、いくつかのパフォーマンス上の利点を有していてもよいdata.tableからrbindlistを試してみてください'for'ループの中で' rbind'-ingよりdata.frameを作成する良い方法 – SymbolixAU

+3

もっと* how *?同じ名前を 'data.frame(x、y、z)'だけすることができれば、データフレームに引数を指定する必要はありません。 x、y、zが別々の変数ではなくリストにあれば、おそらく 'as.data.frame'だけを使うことができます。しかし、その行は本当にうまく見えます。それはひどく見える 'rbind'行です:そのようなループ内のオブジェクトを成長させることは[R Infernoの地獄の第二の円]です(http://www.burns-stat.com/pages/Tutor/R_inferno.pdf) 。あなたの 'answer.df'をあらかじめ割り当ててそれに直接挿入するか、リスト内のベクトルを保持し、最後に一度データフレームにします。 – Gregor

+0

@SymbolixAU私はちょうど学びます。赤ちゃんのステップ。 – lebelinoz

答えて

0

これを試してみてください:

library(data.table) 
rbindlist(lapply(1:100, function(i) list(x = xfun(i), y = yfun(i)))) 
関連する問題