编写变量数量不确定的R函数,用于表()

编写变量数量不确定的R函数,用于表(),r,function,R,Function,我不太熟悉处理所用变量的R函数。 问题是: 我想构建一个函数,其中变量…是用于table()的数据帧的列名 f显然,with()的求值顺序不太正确。这里有一个可行的替代方案(使用@DavidArenburg的样本数据) set.seed(1) data1避免非标准计算和使用字符串引用data.frame中的列通常要容易得多 set.seed(1) data1 <- data.frame(a = sample(5,5), b = sample(5,5)) f <- function

我不太熟悉处理所用变量的R函数。 问题是:

我想构建一个函数,其中变量
是用于
table()
的数据帧的列名


f显然,
with()的求值顺序不太正确。这里有一个可行的替代方案(使用@DavidArenburg的样本数据)

set.seed(1)

data1避免非标准计算和使用字符串引用data.frame中的列通常要容易得多

set.seed(1)
data1 <- data.frame(a = sample(5,5), b = sample(5,5))

f <- function (data, ...) {
    do.call(table,data[unlist(list(...))])

}
# the following calls to `f` return the same results
f(data = data1, 'a','b')
f(data = data1, c('a','b'))
a <- c('a','b')
f(data = data1, a)
set.seed(1)

data1
f感谢您的帮助!我只是好奇
如何作为函数中的列表工作。在什么情况下我应该使用
?您是否学习了R简介的第10.4节?是的。但我还是不明白为什么不能这样使用参数<代码>f值得一读
set.seed(1)
data1 <- data.frame(a = sample(5,5), b = sample(5,5))

f <- function (data, ...) {
    xx <- lapply(substitute(...()), eval, data, parent.frame())
    T <- do.call(table, xx)
    return(T)
}

f(data = data1, a,b)
set.seed(1)
data1 <- data.frame(a = sample(5,5), b = sample(5,5))

f <- function (data, ...) {
    do.call(table,data[unlist(list(...))])

}
# the following calls to `f` return the same results
f(data = data1, 'a','b')
f(data = data1, c('a','b'))
a <- c('a','b')
f(data = data1, a)