gpt4 book ai didi

r - 替代 (m)get in data.table 函数

转载 作者:行者123 更新时间:2023-12-04 00:58:48 26 4
gpt4 key购买 nike

假设我有以下 data.table 并希望通过引用存储在向量中的变量来获取以下输出:

dt <- data.table(a = rep(1, 3),
b = rep(2, 3))

x <- 'a'
y <- 'b'

dt[, .(sum(get(x)), mean(get(y)))]

V1 V2
1: 3 2

很酷,它有效。但现在我想做一个函数,然后做类似的事情:

foo <- function(arg1, arg2) {

dt[, .(sum(get(arg1)), mean(get(arg2)))]

}

foo(x, y)

意识到它的工作原理,我想避免调用所有这些 gets,并执行如下操作:

foo <- function(arg1, arg2) {

eval(substitute(dt[, .(sum(arg1), mean(arg2))]))

}

foo(x, y) # or foo('x', 'y')

但这失败了。关于如何以类似于多次调用 get 的方式一次评估所有参数的任何想法?

最佳答案

我们可以转换为symas.symbol 填充或 as.nameeval时间

foo <- function(arg1, arg2) {

dt[, .(sum(eval(as.name(arg1))), mean(eval(as.name(arg2))))]

}

foo(x, y)
# V1 V2
#1: 3 2

或使用 [[对 data.table 的列进行子集化

foo <- function(arg1, arg2) {

dt[, .(sum(.SD[[arg1]]), mean(.SD[[arg2]]))]

}

foo(x, y)
# V1 V2
#1: 3 2

或者另一种选择是 pasteeval/parse

 foo <- function(arg1, arg2) {

eval(parse(text = paste0("dt[, .(sum(", arg1, "), mean(", arg2, "))]")))

}

foo(x, y)
# V1 V2
#1: 3 2

关于r - 替代 (m)get in data.table 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60366128/

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