Список к вектору с условной логикой

У меня есть список, такой как,

lst <- list(1, c(3, 4, 6), c(2, 5))

Каждый первый элемент этого списка имеет первостепенное значение. Вы можете думать цифры в списке позиций. Например, есть от 1 до 6 позиций, где позиция 1 не комбинируется ни с какой другой. Позиции 4 и 6 комбинируются с позицией 3, а позиция 5 комбинируется с позицией 2. Теперь мне нужно создать вектор как,

W1 W2 W3 W4 W5 W6
W1 W2 W3 W3 W2 W3

Это именованный вектор. Имя - это название позиции, а значения - это позиция, с которой они объединяются. Это кажется легким, но отнимает у меня много времени. Заранее спасибо.

2 ответа

Решение
res <- character(length(unlist(lst)))
names(res) <- paste0("W", seq_along(unlist(lst)))
lapply(lst, function(x) res[x] <<- paste0("W", x[1]))
res
#   W1   W2   W3   W4   W5   W6 
# "W1" "W2" "W3" "W3" "W2" "W3" 

редактировать

Или, может быть, это один из тех случаев, когда for петля лучше (и избегает <<-):

res <- character(length(unlist(lst)))
names(res) <- paste0("W", seq_along(unlist(lst)))
for (x in lst) res[x] <- paste0("W", x[1])
res
#   W1   W2   W3   W4   W5   W6 
# "W1" "W2" "W3" "W3" "W2" "W3"

Еще одна альтернатива. Пожалуйста, проверьте и предоставьте время, если это возможно. Это может помочь другим.

t<-list()
for(t1 in lst){t[paste0("w",t1)]<-paste0("w",t1[1])}
output<-unlist(t, recursive = TRUE, use.names = TRUE)
Другие вопросы по тегам