从函数中的数据框动态选择列

时间:2014-04-30 13:50:05

标签: r dataframe

我有一个数据框,我想从中选择一列。为此,我定义了一个函数。列的名称作为参数提供:

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中列出的任何列相加...

1 个答案:

答案 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