为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕哥6287543 2019-07-27 14:23:52
是否可以创建基于输入对象名称命名的列表?能够创建R列表对象而不必指定每个元素的名称对我非常有帮助。例如:a1 <- 1a2 <- 20a3 <- 1:20b <- 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这将是理想的。有什么建议?
查看完整描述

3 回答

?
浮云间

TA贡献1829条经验 获得超3个赞

巧合的是,我刚刚写了这个函数。它看起来很像@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 <- 1namedList(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)

唯一明显的区别是在这种情况下,各个向量也有名称。


查看完整回答
反对 回复 2019-07-27
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

该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


查看完整回答
反对 回复 2019-07-27
?
智慧大石

TA贡献1946条经验 获得超3个赞

一个随意的想法:

a1<-1a2<-20a3<-1:20my_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。)


查看完整回答
反对 回复 2019-07-27
  • 3 回答
  • 0 关注
  • 536 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信