我不太熟悉处理所用变量的R函数。 这是问题所在:
我想构建一个函数,其变量...
是用于table()
的数据框的列名。
f <- function (data, ...){
T <- with(data, table(...) # ... variables input
return(T)
}
我该如何处理代码? 非常感谢您的回答!
答案 0 :(得分:1)
评估顺序显然不适用于with()
。这是一个应该有效的替代方案(使用来自@DavidArenburg的样本数据)
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)
答案 1 :(得分:0)
通常要容易避免非标准评估,并使用字符串来引用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)