[英]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.