【发布时间】:2015-05-07 17:37:55
【问题描述】:
我将如何使用mutate(我的假设是我正在寻找标准评估,因此mutate_,但我对这一点并不完全有信心)使用接受变量名称列表的函数时,例如:
createSum = function(data, variableNames) {
data %>%
mutate_(sumvar = interp(~ sum(var, na.rm = TRUE),
var = as.name(paste(as.character(variableNames), collapse =","))))
}
这是一个 MWE,它将功能剥离到其核心逻辑并展示了我想要实现的目标:
library(dplyr)
library(lazyeval)
# function to make random table with given column names
makeTable = function(colNames, sampleSize) {
liSample = lapply(colNames, function(week) {
sample = rnorm(sampleSize)
})
names(liSample) = as.character(colNames)
return(tbl_df(data.frame(liSample, check.names = FALSE)))
}
# create some sample data with the column name patterns required
weekDates = seq.Date(from = as.Date("2014-01-01"),
to = as.Date("2014-08-01"), by = "week")
dfTest = makeTable(weekDates, 10)
# test mutate on this table
dfTest %>%
mutate_(sumvar = interp(~ sum(var, na.rm = TRUE),
var = as.name(paste(as.character(weekDates), collapse =","))))
这里的预期输出是:
rowSums(dfTest[, as.character(weekDates)])
【问题讨论】:
-
您定义了
makeTable,然后调用makeDataFrame。这些应该是相同的功能吗?描述您对此示例输入的期望输出会很有帮助(为数据设置种子是可重现的)。 -
@MrFlick 谢谢。更改了函数名称。没有任何花哨的东西,只是所有变量名的变量中的
sum逐行传递给函数。将更新为预期的输出。