Что касается проблемы №713, я думаю, что обнаружил связанную ошибку.
Объявление и передача функции агрегирования _в_ функции, вызывающей dcast.data.table, не работает на моем компьютере
R версия 3.2.2 (14.08.2015)
Платформа: x86_64-apple-darwin13.4.0 (64-разрядная)
Работает под управлением: OS X 10.10.2 (Yosemite)
data.table_1.9.6
Вот пример:
testdata=data.table(c(1,1, 1, 2, 2), c(1,2,3, 4, 5), c( "a", "a", "b", "a", "b"))
colnames(testdata)=c("ID", "VAL", "CLASS")
#test dcast.data.table within function with internally declared aggregate fun -> FAILS
test_dcast_dt2 <- function(data) {
testfunc2 <- function(x) {
sum(x)
}
data_cast=dcast.data.table(data, "ID ~ CLASS", value.var="VAL", fun.aggregate=testfunc2)
}
res2=test_dcast_dt2(testdata)
Интересно видеть, что и этот случай терпит неудачу:
testdata=data.table(c(1,1, 1, 2, 2), c(1,2,3, 4, 5), c( "a", "a", "b", "a", "b"))
colnames(testdata)=c("ID", "VAL", "CLASS")
test_dcast_dt <- function(data, aggfunc) {
data_cast=dcast.data.table(data, "ID ~ CLASS", value.var="VAL", fun.aggregate=aggfunc)
}
custom_sum <- function(x) {
sum(x)
}
res=test_dcast_dt(testdata, custom_sum)
Мне кажется, что проблема №713 была исправлена только в том случае, если имя переменной для переданной функции всегда "fun.aggregate":
Этот пример работает в отличие от предыдущего:
testdata=data.table(c(1,1, 1, 2, 2), c(1,2,3, 4, 5), c( "a", "a", "b", "a", "b"))
colnames(testdata)=c("ID", "VAL", "CLASS")
test_dcast_dt <- function(data, fun.aggregate) {
data_cast=dcast.data.table(data, "ID ~ CLASS", value.var="VAL", fun.aggregate=fun.aggregate)
}
custom_sum <- function(x) {
sum(x)
}
res=test_dcast_dt(testdata, custom_sum)
Я думаю, что у меня проблема с этой ошибкой, но я хотел убедиться, что это та же проблема. Я пытался определить fun.aggregate внутри функции перед вызовом dcast. Банальный пример:
wrapper <- function() {
f <- function(x) list(x)
dcast(data, y ~ x + b, fun.aggragate = f)
}
Я пытался найти f с помощью get (), ориентируясь на определенные среды sys.call. Я также попытался прикрепить f к new.env () из базового окружения. Так является ли комментарий "d0rg0ld commentated on Oct 2, 2015" по-прежнему лучшим подходом в настоящее время?
Связанный вопрос о SO: функция R data.table не распознает уже указанный аргумент
Самый полезный комментарий
Мне кажется, что проблема №713 была исправлена только в том случае, если имя переменной для переданной функции всегда "fun.aggregate":
Этот пример работает в отличие от предыдущего: