代码之家  ›  专栏  ›  技术社区  ›  Calum You

如何使用对象名从环境对象生成命名列表或矢量?[副本]

r
  •  0
  • Calum You  · 技术社区  · 8 年前

    我正在尝试获取我的环境中的对象,并将它们放入一个列表或向量中,该列表或向量是用对象的名称命名的。下面是一个例子:

    a = 1
    b = 2
    
    desired <- c(a, b)
    names(desired) <- c("a", "b")
    desired
    #> a b 
    #> 1 2
    

    我的尝试是以下的变化。我可以理解为什么这不起作用(即使我的术语可能不太正确):它在计算出 ... 1, 2 是的。不过,我想办法让它 a, b 这样我就能把名字正确地写下来。我对任何解决方案都持开放态度,在R基地, rlang 或者其他人。

    name_list <- function(...){
      names <- enquote(list(...))
      values <- list(...)
      return(names)
    }
    print(name_list(a, b))
    #> quote(list(1, 2))
    

    于2018年7月10日由 reprex package (第0.2.0版)。

    1 回复  |  直到 8 年前
        1
  •  2
  •   chinsoon12    8 年前

    你可以使用 match.call 检索传入的参数的名称

    name_list <- function(...){
      vnames <- as.character(match.call())[-1]
      return(setNames(list(...), vnames))
    }
    a = 1; b=c(1,2)
    name_list(a, b)