簡體   English   中英

如何根據循環是R的一部分來命名表

[英]How to name tables based on the loop they are part of R

我正在嘗試創建一個循環,該循環在每個循環上生成新表,我希望每個表都被稱為table_loopnumber,並且它們將需要查看在上一個循環中創建的表。

我已經為I = 1測試了此代碼,它可以正常工作,但不能作為循環工作。 任何幫助將不勝感激,因為我是R的新手。

for(i in 1:2) {    

 proj4810_op_iteration_[i+1]<-setDT(proj4810_op_iteration_i[, list(Median_High = median(unlist(.SD), na.rm = TRUE)), 
 by = list(item1, section,RL_Description_Full,
    seed_dept,
    Total_DOD,
    england_DoD,
    scotland_DoD,                                                                     
    wales_DoD,
    IOM_DoD,
    NI_DoD,
    unknown_DoD,
    turnover,
    baskets,
    items, 
    unit_price,                                                                     
    Ambient_Low, 
    Bakery_Low ,
    Cleaning_Low, 
    FTN_Low, 
    Fresh_Low, 
    FrozPrep_Low,                                                                     
    current_seedprod)])

}

提前致謝

您可以使用assign “為環境中的名稱分配值”。 它以“變量名,以字符串形式給出”作為第一個參數。 並將要分配給該變量名稱的對象作為第二個參數。 請參閱?assign 相反(根據對象的名稱get對象get )。 因此,以下應工作:

for(i in 1:2){
    previous <- get(paste0("proj4810_op_iteration_", i-1) # get previous data table 
    tmp<-setDT(previous[, list(Median_High = median(unlist(.SD), na.rm = TRUE)), 
                                                       by = list(item1, section,RL_Description_Full,seed_dept,Total_DOD,england_DoD,scotland_DoD,
                                                                 wales_DoD,IOM_DoD,NI_DoD,unknown_DoD,turnover,baskets,items, unit_price,
                                                                 Ambient_Low, Bakery_Low ,Cleaning_Low, FTN_Low, Fresh_Low, FrozPrep_Low,
                                                                 current_seedprod)])
    vname <- paste0("proj4810_op_iteration_", i) # name of object to be created # name of the current data table
    assign(vname, tmp) # save the data table 
}

當然,對於第一次循環迭代,您需要在循環開始之前創建一個對象proj4810_op_iteration_0 ,否則將找不到任何對象。 至於這種方法的優雅之處,我更同意其他人已經發布的列表解決方案,但是如果您真的想這樣,那應該可行。 並且請記住,下次您提出問題時,請提供一個可復制的最小示例。

另一種方法是對數據幀使用列表。

這是您解決的問題的簡化版本。 它涉及計算斐波那契序列的洗脫液。 所需的數據表是

dfList[[1]]
#   xnmo xn
# 1    1  2
dfList[[2]]
#   xnmo xn
# 1    2  3
dfList[[3]]
#   xnmo xn
# 1    3  5

因此,第一個表包含序列的第一部分和第二部分。 第二個表包含序列的第二部分和第三部分,依此類推。

計算此類表的循環可編寫如下

dfList = list(data.frame(xnmo=1, xn=1))

for(i in 1:10)
  dfList[[i+1]] = data.frame(
    xnmo = dfList[[i]]$xn,
    xn = dfList[[i]]$xnmo + dfList[[i]]$xn
  )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM