【发布时间】:2019-04-03 14:34:54
【问题描述】:
我想知道是否有办法将字符串变量中的函数应用于 data.table 中的 .SD cols。
我可以使用 data.table 概括函数调用的所有其他部分,包括输入和输出列,对此我感到非常高兴。但最后一部分似乎是将变量函数应用于 data.table,这是我相信我以前用 dplyr 和 do.call 做过的事情。
mtcars <- as.data.table(mtcars)
returnNames <- "calculatedColumn"
SDnames <- c("mpg","hp")
myfunc <- function(data) {
print(data)
return(data[,1]*data[,2])
}
这显然有效:
mtcars[,eval(returnNames) := myfunc(.SD),.SDcols = SDnames,by = cyl]
但是如果我想应用一个动态函数,这样的东西是行不通的:
functionCall <- "myfunc"
mtcars[,eval(returnNames) := lapply(.SD,eval(functionCall)),.SDcols = SDnames,by = cyl]
我收到此错误:
Error in `[.data.table`(mtcars, , `:=`(eval(returnNames), lapply(.SD, : attempt to apply non-function
使用“应用”和“评估”是正确的想法,还是我完全走错了路?
【问题讨论】:
-
这可能会有所帮助...stackoverflow.com/questions/29620783/… 但是这样的东西不起作用:
mtcars[,eval(returnNames) := lapply(.SD,function(u) {sapply(functionCall, function(f) do.call(f,list(u)))}),.SDcols = SDnames,by = cyl]
标签: r data.table