繁体   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