Присвоить имена внутреннему списку из аргументов функции - PullRequest
1 голос
/ 08 июля 2019

У меня есть функция

f<-function(a,b,x,y,z){
...
return(...) 
}

Я создаю список

list_orginal<-list(c("one","two"),"t4",c("t5","t6"))

Я хочу присвоить именам элементы, которые находятся внутри списка, и я хочу, чтобы это было так же, как функцияаргументы.Вместо того, чтобы вручную делать это как newlist <-list (c ("a" = "one", "b" = "two"), "x" = "t4", c ("y" = "t5", "z"=" t6 ")), я хочу написать кое-что, чтобы автоматизировать это, так как в будущем число переменных может значительно увеличиться, и я не хочу вручную добавлять имена внутри функции </p>

Я пробовал это

unlisted<-unlist(list_orginal)
names(unlisted)<-formalArgs(f)

Я получил имена, присвоенные не зарегистрированным (длиной 5).Как мне назначить его list_original (длиной 3).Есть ли способ сопоставить имена между ними?

Ответы [ 2 ]

1 голос
/ 08 июля 2019

Вот один из вариантов с 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))
1 голос
/ 08 июля 2019

Может быть, вы могли бы 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"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...