Предположим, у меня есть список индексов и значений.
indx_list <- list(1,2,c(3,4),5,c(6,7,8))
val_list <- list(0.1,0.6,c(0.8,0.9),0.3,c(0.4,0.8,0.5))
Затем я хочу обновить оба списка, удалив индексы c(4,7)
и соответствующие значения c(0.9,0.5)
. Это довольно легко сделать, используя lapply
и setdiff
. Например:
indx_list_new <- lapply(indx_list,function(x) setdiff(x,c(4,7)))
val_list_new <- lapply(val_list,function(x) setdiff(x,c(0.9,0.5)))
Однако я заранее не знаю, какие индексы и соответствующие значения я буду удалять.
set.seed(1234)
indx_flag <- sample(seq(8),2)
Вы также можете видеть, что некоторые значения повторяются (например, 0,8), поэтому использование setdiff
может фактически удалить значения в неправильной позиции.
Вопросы
1) Я все еще могу использовать lapply
и setdiff
для обновления indx_list
, но как я могу обновить значения в val_list
?
2) Является ли lapply
наиболее эффективным решением здесь? У меня будут списки с тысячами элементов, и каждый элемент может быть вектором сотен индексов / значений.
Редактировать
Каждый элемент в списке (самый высокий уровень) на самом деле имеет определенное значение, поэтому я хотел бы сохранить структуру списка.