当我使用data.table进行练习时遇到了一个问题。这是我的问题。我写了一个简单的减法函数:
minus <- function(a, b){
return(a - b)
}
我的数据集是一个简单的 data.table:
dt <- as.data.table(data.frame(first=c(5, 6, 7), second=c(1,2,3)))
dt
first second
1 5 1
2 6 2
3 7 3
我想要编写另一个函数,
myFunc <- function(dt, FUN, ...){
return(dt[, new := FUN(...)])
}
使用方法很简单:
res <- myFunc(dt, minus, first, second)
结果将会如下所示:
res
first second new
1: 5 1 4
2: 6 2 4
3: 7 3 4
我该如何实现这样的目标?谢谢!
setnames
? - A5C1D2H2I1M1N2O1R2T1do.call
而不是Reduce
。我现在没有电脑在身边... - A5C1D2H2I1M1N2O1R2T1do.call
,但感觉有点奇怪。你能再帮我一次吗?谢谢。 - morningfinminus
如下:minus <- function(...) Reduce("-", list(...))
。然后,将myFunc
中的最后一行更改为:copy(indt)[, new := do.call(FUN, .SD), .SDcols = sapply(dots, deparse)][]
。 - A5C1D2H2I1M1N2O1R2T1