【发布时间】:2018-03-22 01:43:47
【问题描述】:
我遇到了一个奇怪的问题,即 data.table 函数在另一个函数中使用该函数时无法识别明确定义的参数。
这是一个简单的例子:
第一个函数testFun1时出现错误,
Error in fun(value) : could not find function "fun"
但是,很明显有fun的默认值。
使用reshape2::dcast 没有问题,请参阅testFun2。
testFun1 <- function(data, formula, fun = sum, value.var = "value") {
data.table::dcast(data = data, formula = formula, fun.aggregate = fun,
value.var = "value")
}
testFun2 <- function(data, formula, fun = sum, value.var = "value") {
reshape2::dcast(data = data, formula = formula, fun.aggregate = fun,
value.var = "value")
}
d <- data.table(x = c("a", "b"), y = c("c", "d"), value = 1)
testFun1(d, x ~ y)
# Error in fun(value) : could not find function "fun"
testFun2(d, x ~ y)
【问题讨论】:
-
可以确认 - 查看
debug(data.table::dcast)和testFun1,fun.aggregate对象似乎没有正确执行,它会寻找fun()而不是sum()。如果您将testFun1参数设为fun.aggregate=sum并更新函数体中的引用,那么它会再次开始工作。不知道如何让它更普遍地工作。 -
看起来这是 data.table 中的一个未解决问题; github.com/Rdatatable/data.table/issues/1369
标签: r function data.table