从函数参数向内部列表分配名称

时间:2019-07-08 02:32:26

标签: r list function

我有一个功能

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)。是否有办法在两者之间映射名称?

2 个答案:

答案 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)

这里是Maprelist的一个选项

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))