Подтвердить что ты не робот

R из переменных с именами переменных

Я широко рассмотрел решение этой очень простой задачи, и хотя у меня есть решение, похоже, что должен быть лучший способ. Задача состоит в том, чтобы создать список из набора переменных, используя имена переменных в качестве имен для каждого элемента в списке, например:

a <- 2
b <- 'foo'
c <- 1:4

Мое текущее решение:

named.list <- function(...) { 
    l <- list(...)
    names(l) <- sapply(substitute(list(...)), deparse)[-1]
    l 
}
named.list(a,b,c)

Выдает:

$a
[1] 2

$b
[1] "foo"

$c
[1] 1 2 3 4
4b9b3361

Ответ 1

Несколько способов, о которых я могу думать, включают mget (сделайте предположения об окружающей среде, в которой находятся ваши объекты):

mget( c("a","b","c") )
$a
[1] 2

$b
[1] "foo"

$c
[1] 1 2 3 4

Или как отредактировать вашу функцию, вы можете использовать match.call следующим образом:

named.list <- function(...) { 
    l <- list(...)
    names(l) <- as.character( match.call()[-1] )
   l
}
named.list( a,b,c)
$a
[1] 2

$b
[1] "foo"

$c
[1] 1 2 3 4

Или вы можете сделать это за один раз, используя setNames следующим образом:

named.list <- function(...) { 
    l <- setNames( list(...) , as.character( match.call()[-1]) ) 
    l
}

named.list( a,b,c)
$a
[1] 2

$b
[1] "foo"

$c
[1] 1 2 3 4