我有一个模型对象m1
。我需要创建100个不同名称的副本,以便可以调整和绘制每个副本。要创建副本,我目前正在这样做:
m1recip1 <- m1
m1recip2 <- m1
m1recip3 <- m1
m1recip4 <- m1
m1recip5 <- m1
m1recip6 <- m1
m1recip7 <- m1
...
m1recip100 <- m1
我计划通过循环创建这些对象,但这效率较低,因为我只知道如何在循环遍历所有100个对象之前进行初始化。我正在有效地寻找与其他语言中的宏设施类似的东西(其中m1recip&i会迭代产生名称)。我确定R可以做到这一点-如何?
答案 0 :(得分:3)
如上所述,重新考虑在全局环境中保存许多类似的结构化对象。而是使用命名列表来维护一个索引对象,以维护R具有许多处理程序(即,应用族)在所有元素上运行操作的地方。
具体来说,考虑使用replicate
(包装sapply
)来构建100个 m1 元素,并使用setNames
来命名它们。如果保存在列表中,则不会丢失对象的功能。
model_list <- setNames(replicate(100, m1, simplify = FALSE),
paste0("m1recip", 1:100))
model_list$m1recip1
model_list$m1recip2
model_list$m1recip3
...
答案 1 :(得分:1)
我们可以创建一个包含100个元素的列表,而不是将m1
分配给100个对象,如下所示:
m1recip_list <- lapply(1:100, function(x) m1)
然后我们可以使用元素编号m1recip_list[[10]]
来引用每个元素,或者使用lapply
将函数应用于列表中的每个元素:
lapply(m1recip_list, some_function)
答案 2 :(得分:0)
您可以在循环中使用粘贴功能动态创建对象名称,并且可以使用分配功能(而不是“ <-”运算符)为它们分配值。
for(i in 1:100) {
assign(paste("m1recip",i, sep = ""), m1)
}