именовать векторы символов с тем же именем списка - PullRequest
0 голосов
/ 02 марта 2019

У меня есть список, который выглядит следующим образом.

my_list <- list(Y = c("p", "q"), K = c("s", "t", "u"))

Я хочу присвоить каждому элементу списка (символьным векторам) имя списка, в котором они находятся. Все элементы одного и того же вектора должны иметь одинаковые имена

Я былспособен написать эту функцию, которая работает с одним элементом списка

name_vector <- function(x){
      names(x[[1]]) <- rep(names(x[1]), length(x[[1]]))
      return(x)
    }

> name_vector(my_list[1])
$Y
  Y   Y 
"p" "q" 

, но не может найти способ векторизации.Если я запускаю его с функцией apply, он просто возвращает список без изменений

> lapply(my_list, name_vector)
$K
[1] "p" "q"

$J
[1] "x" "y"

Мой желаемый вывод для my_list - именованный вектор

 Y   Y   K   K   K  
"p" "q" "s" "t" "u"

Ответы [ 2 ]

0 голосов
/ 02 марта 2019

, если ваши имена не заканчиваются цифрами:

vec <- unlist(my_list)
names(vec) <- sub("\\d+$","",names(vec))
vec                
#   Y   Y   K   K   K 
# "p" "q" "s" "t" "u" 
0 голосов
/ 02 марта 2019

Мы unlist list при установке имен с помощью rep, лицензируя

setNames(unlist(my_list), rep(names(my_list), lengths(my_list)))

или stack в двух столбце data.frame, извлекая столбец 'values'и назовите его «ind»

with(stack(my_list), setNames(values, ind))
...