R объединить распределение списка и заполнение списка по имени - PullRequest
0 голосов
/ 24 февраля 2020

Я пытаюсь выделить память для списков, в которые позже записываю результаты. Вы можете сделать это, например,

mylist <- vector(mode = "list", length = 10)

Но я часто работаю с именованными элементами в списке и для циклов. Имена основаны на текущей итерации, поэтому они недоступны заранее.

Если я сделаю это сейчас

years <- c("2010", "2011", "2012", "2013", "2014")

results_list <- vector(mode = "list", length = length(years))

for (year in years) {
  current_name <- paste("The year", year)
  value <- as.numeric(year)
  results_list[[current_name]] <- value
}

> results_list
[[1]]
NULL

[[2]]
NULL

[[3]]
NULL

[[4]]
NULL

[[5]]
NULL

$`The year 2010`
[1] 2010

$`The year 2011`
[1] 2011

$`The year 2012`
[1] 2012

$`The year 2013`
[1] 2013

$`The year 2014`
[1] 2014

, он не будет размещен ни в одном из выделенных мест, но новые будут добавлены в список. Я понимаю, что это не неожиданно, но мои вопросы: можно ли заменить заранее выделенные слоты по имени? Пожалуйста, помните, у меня нет имен элементов, доступных до l oop.

Возможно, сначала можно будет запустить l oop, чтобы просто сгенерировать имена и настроить структуру списка а затем заполните список на основе второго l oop, совпадающего с именованными элементами. Как вы думаете, это сэкономило бы память и скорость для больших списков?

Если это (легко) невозможно, я перепишу свой код для адресации слотов по индексу, независимо от имени, и изменю его впоследствии

1 Ответ

1 голос
/ 24 февраля 2020

Полагаю, ответ не для вашего случая. Если вы предварительно выделите ресурсы для mylist, то вам, возможно, придется сначала задать имена для элементов в mylist, а затем назначить значения в соответствии с именами, что потребует двух отдельных шагов.

Если вы хотите установить имя и присвойте значение в одну строку, может быть, вы можете попробовать код ниже

years <- c("2010", "2011", "2012", "2013", "2014")

mylist <- list()
for (i in years) {
  mylist[paste("The year",i)] <- as.numeric(i)
}

такой, что

> mylist
$`The year 2010`
[1] 2010

$`The year 2011`
[1] 2011

$`The year 2012`
[1] 2012

$`The year 2013`
[1] 2013

$`The year 2014`
[1] 2014
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...