将每个R for循环迭代保存在新列表中

时间:2016-05-04 12:25:28

标签: r for-loop

我正在使用Synth包的 dataprep 功能(参见https://cran.r-project.org/web/packages/Synth/Synth.pdf)。

我在R中有以下命令要循环:

dataprep.out <- dataprep(foo=expenditures,
     predictors=c("pop_tot", "share_yng", "share_old", "unempl", "sign_pop_initiative", "cab_size", "parl_size"),
     predictors.op="mean",
     dependent="exp_welf",
     unit.variable="canton",
     unit.names.variable="canton_abr",
     time.variable="year",
     treatment.identifier=7,
     controls.identifier=c(6, 8, 15, 16),
     time.optimize.ssr=1980:1995,
     time.plot=1980:2007,
     time.predictors.prior=1980:1995
     )

class(dataprep.out)
[1] "list"

到目前为止一切顺利。结果是一个列表[8]。现在我想循环命令(注意 treatment.identifier controls.identifier 中的更改:

for (i in c(6,8,15,16)){dataprep(foo=expenditures,
                     predictors=c("pop_tot", "share_yng", "share_old", "unempl", "sign_pop_initiative", "cab_size", "parl_size"),
                     predictors.op="mean",
                     dependent="exp_welf",
                     unit.variable="canton",
                     unit.names.variable="canton_abr",
                     time.variable="year",
                     treatment.identifier=i,
                     controls.identifier=c(6,8,15,16)[c(6,8,15,16) !=i],
                     time.optimize.ssr=1980:1995,
                     time.plot=1980:2007,
                     time.predictors.prior=1980:1995)}

如何将每个迭代保存在自己的列表中?我想要一个清单,例如dataprep.out“i”,对于每次迭代,因此每个对象“i”(dataprep.out6; dataprep.out8等)。

我想我必须先创建这些对象,这样循环才能将结果保存到相应的列表中。然而,我正在努力解决我必须创建的对象。而且我不知道如何告诉for循环将每个结果分配给仅在“i”中变化的列表(dataprep.out“i”,其中“i”变化)。

1 个答案:

答案 0 :(得分:1)

您可以先创建列表,然后像

一样添加项目
i_list=c(6,8,15,16)
result_list=list()
for (i in seq(i_list)){
  result_list[[i]]=dataprep(...)}

但您需要更改标识符

treatment.identifier=i_list[[i]],
controls.identifier=c(6,8,15,16)[c(6,8,15,16) !=i_list[[i]]]

但lapply变种为@ zx8754告诉更好

result_list=lapply(i_list,function(i) dataprep(...))