如果它们都属于列表,如何为向量分配名称?

时间:2015-10-15 11:40:57

标签: r lapply

我有一个清单

test_list = list(foo = c( "a","b","c"), bar = c("First", "Second"))
test_list
# $foo
# [1] "a" "b" "c" 
# $bar
# [1] "First" "Second"

我想为vector的每个元素指定名称,这是从数据帧的级别

获得的
annotation = data.frame(foo = factor(c(rep(1,3),rep(2,2), rep(3,1))),
                        bar = factor(c(rep('Male',2), rep('Female',4)) ))
# foo     bar
#   1    Male
#   1    Male
#   1  Female
#   2  Female
#   2  Female
#   3  Female

我可以按如下方式提取等级:

lapply(annotation, levels)

我可以逐个指定名称:

names(test_list$foo) <- levels(annotations$foo)

然而,由于我在实际中有更长的列表,我想要矢量化命名过程。数据框中的列数与列表中的元素数完全匹配;每个因子的级别数与矢量中的元素数完全匹配,这些元素是列表的元素。

如果不进入循环,我怎么能这样做?

1 个答案:

答案 0 :(得分:1)

我们可以使用Map通过list的相应列的test_listlevels annotation元素分配名称。

test_list <- Map(setNames, test_list, lapply(annotation, levels))