我有一个数据框,我想从中选择一列。为此,我定义了一个函数。列的名称作为参数提供:
d <- data.frame(x = 1:10, y = sample(1:100, 10, replace = TRUE))
f1 <- function(data, name)
{
data[name]
}
f1(d, "x")
f1(d, "y")
但是,我不想将列名称作为字符串提供,而是将列作为符号提供,如下所示:
f2(d, x)
f2(d, y)
我的问题:如何定义f2
?
背景:这是一个简化的例子。实际上要定义的函数有这个原型:
fx(d, v, ...)
并返回一个数据框,该数据框与v
中列出的任何列相加...
。
答案 0 :(得分:2)
使用deparse(substitute(name))
,即
f2 <- function(data, name)
data[deparse(substitute(name))]
例如:
data <- data.frame(id=1:5, val=letters[1:5])
f2(data, val)
## val
##1 a
##2 b
##3 c
##4 d
##5 e
对于多列选择,您可以使用:
f3 <- function(data, ...) {
cols <- sapply(as.list(match.call())[-(1:2)], as.character)
data[cols]
}
例如:
f3(data, val, id)
## val id
## 1 a 1
## 2 b 2
## 3 c 3
## 4 d 4
## 5 e 5