如何将新的摘要列的名称传递给函数中的data.table? [英] How do I pass names for new summary columns to data.table in a function?

查看:57
本文介绍了如何将新的摘要列的名称传递给函数中的data.table?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

说我想要创建一个函数来从R中的data.table计算一个汇总数据集,我想能够以编程方式传递新的计算变量的名称。

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 programmatically.

例如:

library(data.table)

# generate some fake data
set.seed(919)
dt <- data.table(x = rnorm(50), by.var = rep(c("a", "b"), 25))
dt[, list(group.means = mean(x)), by = "by.var"]  # This is what I want

# But I want to do in a function, so I can do it repeatedly:
groupMeans <- function(out.var, by.var, dat = dt) {
  return(dat[, list(out.var = mean(x)), by = by.var])  # doesn't work
}

groupMeans("group.means", "by.var")  # out.var should be "group.means"

如何做到这一点?

推荐答案

感谢 docendo discimus ,您可以使用命名列表用 setNames 创建,如下所示:

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

这篇关于如何将新的摘要列的名称传递给函数中的data.table?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆