создание и редактирование множества объектов одновременно - PullRequest
0 голосов
/ 15 ноября 2018

У меня есть объект модели m1. Мне нужно создать 100 копий с четким именем, чтобы я мог настроить и построить каждую. Чтобы создать копию, я сейчас делаю это так:

m1recip1 <- m1
m1recip2 <- m1
m1recip3 <- m1
m1recip4 <- m1
m1recip5 <- m1
m1recip6 <- m1
m1recip7 <- m1
...
m1recip100 <- m1

Я планировал создать их с помощью цикла, но это менее эффективно, потому что я знаю, как это сделать, только инициализируя все 100 объектов, прежде чем проходить через них. Я эффективно ищу что-то похожее на макрос в других языках (где m1recip & i будет производить имена итеративно). Я уверен, что R может сделать это - как?

Ответы [ 3 ]

0 голосов
/ 15 ноября 2018

Как упомянуто выше, пересмотреть сохранение многих подобных структурированных объектов в глобальной среде.Вместо этого используйте именованный список, который приводит к ведению индексированного объекта one , чтобы поддерживать, где 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
...
0 голосов
/ 15 ноября 2018

Вместо присвоения m1 100 объектам, мы можем создать список из 100 элементов, например:

m1recip_list <- lapply(1:100, function(x) m1)

Затем мы можем ссылаться на каждый элемент по номеру элемента m1recip_list[[10]] или применять функцию к каждому элементу списка, используя lapply:

lapply(m1recip_list, some_function)
0 голосов
/ 15 ноября 2018

Вы можете динамически создавать имена объектов, используя функцию вставки в цикле, и вы можете присваивать им значения, используя функцию присвоения, а не оператор "<-". </p>

for(i in 1:100) {
  assign(paste("m1recip",i, sep = ""), m1)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...