是否可以创建基于输入对象名称命名的列表?

是否可以创建基于输入对象名称命名的列表?

能够创建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

这将是理想的。有什么建议?


慕哥6287543
浏览 550回答 3
3回答

浮云间

巧合的是,我刚刚写了这个函数。它看起来很像@joran的解决方案,但它试图不踩已经命名的参数。namedList&nbsp;<-&nbsp;function(...)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;L&nbsp;<-&nbsp;list(...) &nbsp;&nbsp;&nbsp;&nbsp;snm&nbsp;<-&nbsp;sapply(substitute(list(...)),deparse)[-1] &nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(is.null(nm&nbsp;<-&nbsp;names(L)))&nbsp;nm&nbsp;<-&nbsp;snm&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(any(nonames&nbsp;<-&nbsp;nm==""))&nbsp;nm[nonames]&nbsp;<-&nbsp;snm[nonames] &nbsp;&nbsp;&nbsp;&nbsp;setNames(L,nm)}##&nbsp;TESTING:a&nbsp;<-&nbsp;b&nbsp;<-&nbsp;c&nbsp;<-&nbsp;1namedList(a,b,c)namedList(a,b,d=c)namedList(e=a,f=b,d=c)复制评论:如果你想要一个CRAN包的东西,你可以使用Hmisc::llist:Hmisc::llist(a,&nbsp;b,&nbsp;c,&nbsp;d=a,&nbsp;labels&nbsp;=&nbsp;FALSE)唯一明显的区别是在这种情况下,各个向量也有名称。

qq_笑_17

该tidyverse软件包tibble具有可以执行此操作的功能。试用tibble::lsttibble::lst(a1, a2, a3)# $a1#&nbsp; [1] 1## $a2#&nbsp; [1] 20#&nbsp;# $a3#&nbsp; [1]&nbsp; 1&nbsp; 2&nbsp; 3&nbsp; 4&nbsp; 5&nbsp; 6&nbsp; 7&nbsp; 8&nbsp; 9 10 11 12 13 14 15 16 17 18 19 20

智慧大石

一个随意的想法:a1<-1a2<-20a3<-1:20my_list&nbsp;<-&nbsp;function(...){ &nbsp;&nbsp;&nbsp;&nbsp;names&nbsp;<-&nbsp;as.list(substitute(list(...)))[-1L] &nbsp;&nbsp;&nbsp;&nbsp;result&nbsp;<-&nbsp;list(...) &nbsp;&nbsp;&nbsp;&nbsp;names(result)&nbsp;<-&nbsp;names &nbsp;&nbsp;&nbsp;&nbsp;result}>&nbsp;my_list(a1,a2,a3)$a1[1]&nbsp;1$a2[1]&nbsp;20$a3&nbsp;[1]&nbsp;&nbsp;1&nbsp;&nbsp;2&nbsp;&nbsp;3&nbsp;&nbsp;4&nbsp;&nbsp;5&nbsp;&nbsp;6&nbsp;&nbsp;7&nbsp;&nbsp;8&nbsp;&nbsp;9&nbsp;10&nbsp;11&nbsp;12&nbsp;13&nbsp;14&nbsp;15&nbsp;16&nbsp;17&nbsp;18&nbsp;19&nbsp;20(这个想法是从代码中偷来的data.frame。)
打开App,查看更多内容
随时随地看视频慕课网APP