具有相同名称的列表和字符向量的命名方式。

6

我有一个列表长这样。

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个回答

8
我们在使用rep函数复制名称的同时,取消列表的嵌套。
setNames(unlist(my_list), rep(names(my_list), lengths(my_list)))

把数据转换成两列的数据框,提取“values”列并将其命名为“ind”。

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

1
第一个完美运行,谢谢!(我也不知道“lenghts”的存在) - likeeatingpizza

4

如果您的名字不以数字结尾:

vec <- unlist(my_list)
names(vec) <- sub("\\d+$","",names(vec))
vec                
#   Y   Y   K   K   K 
# "p" "q" "s" "t" "u" 

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接