R:从变量创建命名向量

时间:2011-02-18 14:58:50

标签: r

在函数内部,我定义了一堆标量变量,如下所示:

a <- 10
b <- a*100
c <- a + b

在函数结束时,我想在命名向量中返回a,b,c,其名称与变量相同,编码最少,即我想做:

c( a = a, b = b, c = c )

是否有语言结构可以做到这一点?例如,如果我只是return(c(a,b,c)),它会返回一个未命名的向量,这不是我想要的。我目前有一种hacky方式:

> cbind(a,b,c)[1,]
   a    b    c 
  10 1000 1010 

是否有更好,更少hacky的方式?

1 个答案:

答案 0 :(得分:13)

这是为您执行此操作的功能,它还允许您选择性地命名某些值。除了获取未评估表达式并将其解析为单个字符向量的技巧之外,没有太多内容。

c2 <- function(...) {
  vals <- c(...)

  if (is.null(names(vals))) {
    missing_names <- rep(TRUE, length(vals))
  } else {
    missing_names <- names(vals) == ""
  }
  if (any(missing_names)) {
    names <- vapply(substitute(list(...))[-1], deparse, character(1))
    names(vals)[missing_names] <- names[missing_names]
  }

  vals
}

a <- 1
b <- 2
c <- 3

c2(a, b, d = c)
# a b d 
# 1 2 3 

请注意,不能保证生成语法上有效的名称。如果需要,请将make.names函数应用于names向量。

c2(mean(a,b,c))
# mean(a, b, c) 
#            1 

此外,与使用替代的任何函数一样,c2更适合交互使用,而不是在另一个函数中使用。