【发布时间】:2016-05-04 12:25:28
【问题描述】:
我正在使用 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”在变化)。
【问题讨论】:
-
我们使用返回列表而不是forloop的函数,例如:
res <- lapply(c(6,8,15,16), function(i){ do some stuff return(result) }) -
感谢您的快速答复!