我有一个清单
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)
然而,由于我在实际中有更长的列表,我想要矢量化命名过程。数据框中的列数与列表中的元素数完全匹配;每个因子的级别数与矢量中的元素数完全匹配,这些元素是列表的元素。
如果不进入循环,我怎么能这样做?
答案 0 :(得分:1)
我们可以使用Map
通过list
的相应列的test_list
为levels
annotation
元素分配名称。
test_list <- Map(setNames, test_list, lapply(annotation, levels))