Say I want to create a function that calculates a summary dataset from a data.table in R, and I want to be able to pass the name of the new calculated variable in programmat
Courtesy of docendo discimus, you can use a named list created with setNames
, like this:
groupMeans <- function(out.var, by.var, dat = dt) {
return(dat[, setNames(list(mean(x)), out.var), by = by.var])
}
groupMeans("group.means", "by.var")
# by.var group.means
# 1: a -0.1159832
# 2: b 0.2910531
You could consider changing the column names inside your function:
groupMeans <- function(out.var, by.var, dat = dt) {
res <- dat[, list(mean(x)), by=by.var]
setnames(res, "V1", out.var)
res
}
We could use setnames
to name the summarised column with the 'out.var' vector.
groupMeans <- function(out.var, by.var, dat = dt) {
setnames(dat[, list(mean(x)), by = by.var],
length(by.var)+1L, out.var)
}
groupMeans("group.var","by.var", dt)[]
# by.var group.var
#1: a -0.1159832
#2: b 0.2910531
EDIT: Based on @Frank's suggestion.