2017-02-23 235 views
0

我想知道如何將for loop的輸出保存爲data.frame? 假設使用mtcars數據集我有以下for loop腳本:如何將for循環輸出保存爲R中的data.frame?

for (i in seq_len(nrow(mtcars))) { 
    if (i <= 30) { 

    next 
    } 

    print(mtcars[i,]) 
} 

       mpg cyl disp hp drat wt qsec vs am gear carb 
Maserati Bora 15 8 301 335 3.54 3.57 14.6 0 1 5 8 
      mpg cyl disp hp drat wt qsec vs am gear carb 
Volvo 142E 21.4 4 121 109 4.11 2.78 18.6 1 1 4 2 

,但如果我要saveoutput文件dataframe我會得到如下結果:

output <- as.data.frame(c()) 
    for (i in seq_len(nrow(mtcars))) { 
     if (i <= 30) { 

     next 
     } 

     output<- c(output,mtcars[i,]) 
    } 


    ### then the output is 

    > output 
    $mpg 
    [1] 15 

    $cyl 
    [1] 8 

    $disp 
    [1] 301 

    $hp 
    [1] 335 

    $drat 
    [1] 3.54 

    $wt 
    [1] 3.57 

    $qsec 
    [1] 14.6 

    $vs 
    [1] 0 

    $am 
    [1] 1 

    $gear 
    [1] 5 

    $carb 
    [1] 8 

    $mpg 
    [1] 21.4 

    $cyl 
    [1] 4 

    $disp 
    [1] 121 

    $hp 
    [1] 109 

    $drat 
    [1] 4.11 

    $wt 
    [1] 2.78 

    $qsec 
    [1] 18.6 

    $vs 
    [1] 1 

    $am 
    [1] 1 

    $gear 
    [1] 4 

    $carb 
    [1] 2 

我知道簡單索引output <- mtcars[-(1:30), ],但這不是我現實生活中的情況(這更復雜)的解決方案。我真的需要循環來做我想做的事情。

+0

通過使用C()你串聯data.frames的列表。通過使用cbind()而不是c(),你會得到你想要的 –

+0

@Moody_Mudskipper,請你爲我寫清楚你的代碼到底是什麼意思,哪裏需要做? tnx – Daniel

+0

@jogo,tnx的評論,但它沒有幫助!我知道這一點,關鍵在於它如何在循環中,這只是一個示例哥們! :) – Daniel

回答

1

以下是與您的代碼最相似的解決方案。
點被使用的初始化(索引...[NULL, ])和功能rbind()

output <- mtcars[NULL,] 
for (i in seq_len(nrow(mtcars))) { 
    if (i <= 30) { 
     next 
    } 
    # ... 
    output <- rbind(output, mtcars[i, ]) 
}