2017-07-18 113 views
0

假設我有一個名爲remove_fun的函數,它根據某些條件減少了數據幀的行數(該函數在這個問題中過於冗長)。該函數以2列爲輸入數據幀。例如,輸入DF稱爲block_2_df可以看看喜歡這樣的:在R中存儲while循環的數據幀輸出

block_2_df 
Treatment seq 
     1 29 
     1 23 
     3 60 
     1 6 
     2 41 
     1 5 
     2 44 

在這個例子中,假設功能remove_fun在基於序列的block_2_df $序列的最高值時間刪除1行。應用remove_fun一旦將導致新的數據幀,看起來像這樣:

remove_fun(block_2_df) 
Treatment seq 
    1  29 
    1  23 
    1  6 
    2  41 
    1  5 
    2  44 

即含有序列排在== 60 block_2_dfremove_fun

刪除我可以創建一個while循環,其重複此操作經由remove_funblock_2_df根據行中剩餘的block_2_df作爲數:

while (dim(block_2_df)[1]>1) { 
    block_2_df <- remove_fun(block_2_df) 
    print(remove_fun(block_2_df)) 
} 

這個while循環降低直到它剩下1行(最低值爲block_2_df$seq),並打印出block_2_df的'更新'版本,直到它被縮減爲一行。

然而,我想保存的block_2_df每個「更新」版本(即block_2_df 7,然後如圖6所示,然後5,...,然後1行)從while循環產生的。我怎樣才能做到這一點?我知道for循環,這可以通過創建一個空列表來存儲空列表中的ith元素中的每個「已更新」block_2_df。但我不知道如何在while循環中做類似的事情。將這個while循環的dfs列表作爲輸出將會很好。

回答

2

只需創建並維護一個索引計數器。它比一個for()循環更麻煩一些,它可以自行完成,但並不困難。

saved <- list() 
i <- 1 
while (dim(block_2_df)[1]>1) { 
    block_2_df <- remove_fun(block_2_df) 
    saved[[i]] <- block_2_df 
    i <- i + 1 
    print(block_2_df) 
} 

而且,你在你的循環中調用remove_fun兩次,那也許不是你想要做什麼。我已經糾正了,如果我錯了,請說出來。

+0

我在調用remove_fun兩次,但只是因爲我的真實函數輸出兩個對象(所以在我的代碼中,我對這些輸出中的每一個都有兩次調用)。這正是我想要的,謝謝。 – lecreprays