【问题标题】:Use object names as list names in R在 R 中使用对象名称作为列表名称
【发布时间】:2013-03-13 14:11:33
【问题描述】:

当然,我可以像这样手动命名列表中的对象:

    #create dfs
    df1<-data.frame(a=sample(1:50,10),b=sample(1:50,10),c=sample(1:50,10))
    df2<-data.frame(a=sample(1:50,9),b=sample(1:50,9),c=sample(1:50,9))
    df3<-data.frame(a=sample(1:50,8),b=sample(1:50,8),c=sample(1:50,8))

    #make them a list
    list.1<-list(df1=df1,df2=df2,df3=df3)

但是,如果我有 50 个长名称的对象,它会做很多工作。 那么有什么方法可以自动完成,并使列表中的名称与外部对象相同?

【问题讨论】:

标签: r list naming


【解决方案1】:

找到名字,然后打电话给mget
如果每个单独变量的名称都有一个模式,那么这很简单。

var_names <- paste0("df", 1:3)
mget(var_names, envir = globalenv())  #or maybe envir = parent.frame()

如果命名系统比较复杂,你可以使用正则表达式来查找它们,使用类似

var_names <- ls(envir = globalenv(), pattern = "^df[[:digit:]]+$")

【讨论】:

    【解决方案2】:

    如果你只是想用共享某些东西的环境中的名称命名一个列表,在本例中为“df”:

    names(list.1) <- grep("df",ls(),value=TRUE)
    

    如果要将环境推送到列表中:

    list.1 <- globalenv()
    list.1 <- as.list(list.1) 
    

    要反转该过程,请参阅?list2env

    【讨论】:

      【解决方案3】:

      如可能重复问题的回答中所述:

      在 tidyverse 中,使用 tibble:lsthttps://tibble.tidyverse.org/reference/lst.html

      【讨论】: