gpt4 book ai didi

r - 在 R 中的自定义函数中将参数传递给 data.table 的简单可重现示例

转载 作者:行者123 更新时间:2023-12-04 09:35:17 25 4
gpt4 key购买 nike

我一直在谷歌上搜索这个答案几个小时。很多人都问过类似的问题,但我没有找到足够简单的问题或直截了当的答案。这是我的方法:

假设我想在 data.table 中做一个简单的分组:

library(data.table)
mtcars = data.table(mtcars)
mtcars[,sum(mpg), gear]

# Here are the results
# gear V1
#1: 4 294.4
#2: 3 241.6
#3: 5 106.9

但是,如果我使用自定义函数来执行此操作:
zz = function(data, var, group){
return(data[,sum(var), group])
}
zz(mtcars, mpg, gear)

我收到一条错误消息:

Error in eval(bysub, parent.frame(), parent.frame()) : object 'gear' not found



我试过 substitute , eval , quote , 和其他解决方案,但它们都不起作用。我想知道是否有人可以对此提供更直接的解决方案和解释。

谢谢你,万圣节快乐!

最佳答案

如果我们使用不带引号的参数,substituteeval

zz <- function(data, var, group){
var <- substitute(var)
group <- substitute(group)
setnames(data[, sum(eval(var)), by = group],
c(deparse(group), deparse(var)))[]
# or use
# setnames(data[, sum(eval(var)), by = c(deparse(group))], 2, deparse(var))[]

}
zz(mtcars, mpg, gear)
# gear mpg
#1: 4 294.4
#2: 3 241.6
#3: 5 106.9

关于r - 在 R 中的自定义函数中将参数传递给 data.table 的简单可重现示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58648886/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com