在函数内部,我定义了一堆标量变量,如下所示:
a <- 10
b <- a*100
c <- a + b
Run Code Online (Sandbox Code Playgroud)
在函数的结尾,我想回到a,b,c一个名为向量,具有相同的名称作为变量,用最少的代码,即我并不想这样做:
c( a = a, b = b, c = c )
Run Code Online (Sandbox Code Playgroud)
是否有语言结构可以做到这一点?例如,如果我只是这样做,return(c(a,b,c))则返回一个未命名的向量,这不是我想要的.我目前有一个hacky方式这样做:
> cbind(a,b,c)[1,]
a b c
10 1000 1010
Run Code Online (Sandbox Code Playgroud)
是否有更好,更少hacky的方式?
had*_*ley 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
Run Code Online (Sandbox Code Playgroud)
请注意,不能保证生成语法上有效的名称.如果需要,请将该make.names函数应用于names向量.
c2(mean(a,b,c))
# mean(a, b, c)
# 1
Run Code Online (Sandbox Code Playgroud)
此外,与使用替换的任何函数一样,c2更适合交互使用而不是在另一个函数中使用.