如果它们都属于列表,如何为向量分配名称?
How assign names to vectors, if they all belong to a list?
我有一个列表
test_list = list(foo = c( "a","b","c"), bar = c("First", "Second"))
test_list
# $foo
# [1] "a" "b" "c"
# $bar
# [1] "First" "Second"
我想为矢量的每个元素分配名称,这些元素是我从数据框的级别获得的
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)
然而,由于我在现实中有更长的列表,我想矢量化命名过程。数据框中的列数与列表中的元素数完全匹配;每个因子的水平数与向量中的元素数完全匹配,它们是列表的元素。
如何在不进入循环的情况下执行此操作?
我们可以使用Map
通过annotation
的相应列的levels
为test_list
的list
个元素分配名称。
test_list <- Map(setNames, test_list, lapply(annotation, levels))
我有一个列表
test_list = list(foo = c( "a","b","c"), bar = c("First", "Second"))
test_list
# $foo
# [1] "a" "b" "c"
# $bar
# [1] "First" "Second"
我想为矢量的每个元素分配名称,这些元素是我从数据框的级别获得的
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)
然而,由于我在现实中有更长的列表,我想矢量化命名过程。数据框中的列数与列表中的元素数完全匹配;每个因子的水平数与向量中的元素数完全匹配,它们是列表的元素。
如何在不进入循环的情况下执行此操作?
我们可以使用Map
通过annotation
的相应列的levels
为test_list
的list
个元素分配名称。
test_list <- Map(setNames, test_list, lapply(annotation, levels))