这将是对我很有帮助,能够无需指定每个元素的名称创建的R列表对象。 例如:
a1 <- 1
a2 <- 20
a3 <- 1:20
b <- list(a1,a2,a3, inherit.name=TRUE)
> b
[[a1]]
[1] 1
[[a2]]
[1] 20
[[a3]]
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
这将是理想的。 有什么建议?
这将是对我很有帮助,能够无需指定每个元素的名称创建的R列表对象。 例如:
a1 <- 1
a2 <- 20
a3 <- 1:20
b <- list(a1,a2,a3, inherit.name=TRUE)
> b
[[a1]]
[1] 1
[[a2]]
[1] 20
[[a3]]
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
这将是理想的。 有什么建议?
巧合的是,我只是写了这个功能。 它看起来很像@ joran的解决方案,但尽量不踩在已经命名的参数。
namedList <- function(...) {
L <- list(...)
snm <- sapply(substitute(list(...)),deparse)[-1]
if (is.null(nm <- names(L))) nm <- snm
if (any(nonames <- nm=="")) nm[nonames] <- snm[nonames]
setNames(L,nm)
}
## TESTING:
a <- b <- c <- 1
namedList(a,b,c)
namedList(a,b,d=c)
namedList(e=a,f=b,d=c)
从评论复制:如果你想从CRAN包东西,你可以用Hmisc::llist
:
Hmisc::llist(a, b, c, d=a, labels = FALSE)
唯一明显的区别是,个别矢量也有在这种情况下名字。
随机的想法:
a1<-1
a2<-20
a3<-1:20
my_list <- function(...){
names <- as.list(substitute(list(...)))[-1L]
result <- list(...)
names(result) <- names
result
}
> my_list(a1,a2,a3)
$a1
[1] 1
$a2
[1] 20
$a3
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
(这个想法是从代码被盗data.frame
)。
该tidyverse
包tibble
具有可以做到这一点,以及一个功能。 试用tibble::lst
tibble::lst(a1, a2, a3)
# $a1
# [1] 1
#
# $a2
# [1] 20
#
# $a3
# [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
另一个想法,
sapply(ls(pattern='^a[0-9]'), get)
$a1
[1] 1
$a2
[1] 20
$a3
[1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20