Создание и обновление элемента List в цикле For в R - PullRequest
0 голосов
/ 01 октября 2019

Я хотел бы создать новый элемент в именованном списке, который является результатом операций с другими элементами этого же списка.

Воспроизводимые данные:

# Build Params Matrix
LAL <- c(1:3)
LEL <- c(20191:20192)
LIL <- c(30,40)
LOL <- c(1:2)
params.matrix <- expand.grid(LAL, LEL, LIL, LOL)
colnames(params.matrix) <- c("LAL", "LEL", "LIL", "LOL")

PARAMS.COMBOS = list()
for (ii in 1:nrow(params.matrix)) {
  TMP.ROW <- params.matrix[ii,]
  PARAMS.COMBOS[[ii]] <- list(
    "LAL" = TMP.ROW$LAL,
    "LEL" = TMP.ROW$LEL,
    "LIL" = TMP.ROW$LIL,
    "LOL" = TMP.ROW$LOL
  )
}

for (ii in 1:length(PARAMS.COMBOS)){
  # .. do something else ##
  PARAMS[["LUL"]] <- PARAMS[["LAL"]] * PARAMS[["LIL"]]
}

PARAMS[['LUL']]не хранится в каждом подсписке в PARAMS.COMBOS. Он создается «на лету», но не сохраняется.

Решением было бы создать новый список следующим образом:

new.PARAMS.COMBOS <- list()
    for (ii in 1:length(PARAMS.COMBOS)){
      ## .. do something else ##
      PARAMS[["LUL"]] <- PARAMS[["LAL"]] * PARAMS[["LIL"]]
      new.PARAMS.COMBOS[[ii]] <- PARAMS
    } 

Можно ли обновить PARAMS.COMBOS, чтобы мне не нужно было создавать другой список? Я думаю, что единственный путь - это обновить «вручную» исходный список (аналогично созданию нового списка), например:

for (ii in 1:length(PARAMS.COMBOS)){
  PARAMS <- PARAMS.COMBOS[[ii]]

  ## .. do something else ##

  PARAMS[["LUL"]] <- PARAMS[["LAL"]] * PARAMS[["LIL"]]

  ## .. do something else ##

  PARAMS.COMBOS[[ii]] <- PARAMS
}

Это будет лучшим способом? Есть ли хорошие практики для этого случая?

Спасибо!

...