我有一个功能
list_orginal<-list(c("one","two"),"t4",c("t5","t6"))
我正在创建列表
unlisted<-unlist(list_orginal)
我想分配列表中的名称元素,并且我希望它与函数参数相同。而不是像newlist <-list(c(“ a” =“ one”,“ b” =“ two”),“ x” =“ t4”,c(“ y” =“ t5”,“ z “ =” t6“)),我想写一些东西来使它自动化,因为将来变量的数量会越来越大,并且不想在函数内部手动添加名称
我尝试过
names(unlisted)<-formalArgs(f)
{{1}}
我得到了分配给未列出的名称(长度为5)。如何将其分配给list_original(长度为3)。是否有办法在两者之间映射名称?
答案 0 :(得分:1)
也许您可以unlist
list_orginal
,为他们分配所需的名称,然后split
将它们重新列出。
lst1 <- setNames(unlist(list_orginal), c("a", "b", "x", "y", "z"))
split(lst1, rep(seq_along(list_orginal), lengths(list_orginal)))
#$`1`
# a b
#"one" "two"
#$`2`
# x
#"t4"
#$`3`
# y z
#"t5" "t6"
您也可以将其包装成一个函数
f <- function(list_original, names_vec) {
lst1 <- setNames(unlist(list_orginal), names_vec)
split(lst1, rep(seq_along(list_orginal), lengths(list_orginal)))
}
f(list_orginal, c("a", "b", "x", "y", "z"))
答案 1 :(得分:1)
这里是Map
和relist
的一个选项
Map(setNames, list_orginal, relist(c("a", "b", "x", "y", "z"), list_orginal))
#[[1]]
# a b
#"one" "two"
#[[2]]
# x
#"t4"
#[[3]]
# y z
#"t5" "t6"
可以包装为函数
f1 <- function(lstObj, vec) Map(setNames, lstObj, relist(vec, lstObj))