2017-06-29 62 views
0

我想创建一个循环,它在每个循环上产生新表,我希望每个表都被称为table_loopnumber,并且他们需要查看表在前面的循环中创建。如何基于它们所属的循环来命名表R

我已经测试了这个代码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)]) 

} 

在此先感谢

+0

欢迎堆栈溢出!我编辑了你的问题。我把代码放在'code markdown'中,缩进4个空格。我认为你应该进一步格式化代码。保留4个空格的缩进以确保它显示为代码。祝你好运! –

+2

您不能以这种方式更改对象名称,我建议您查看'list',并将data.tables存储在那里。 – minem

回答

1

您可以使用assign“的环境中分配一个值的名称”。它将第一个参数作为“变量名称,作为字符串给出”。并将第二个参数作为要分配给该变量名称的对象。见?assign。相反(根据其名称获取对象是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,否则将无法发现任何东西。 至于这种方法的优雅,我更赞同其他人已经发布的列表解决方案,但如果你真的想这样做,这应该工作。 请记住,你下一次问你什么,你提供了一个最小的可重复的例子。

+0

感谢这正是我所需要的,非常感谢! – user8230101

+0

不客气! :)如果你觉得你的问题已经解决了,你可以关闭它/将它标记为接受我的答案,以便其他人知道我们找到了解决方案。 – friep

0

另一种方法是使用数据框的列表。

以下是解决问题的简化版本。它涉及计算fibbonacci序列的含量。期望的数据表是

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 
) 
相关问题