#713 рдЕрдВрдХ рдХрд╛ рдЬрд┐рдХреНрд░ рдХрд░рддреЗ рд╣реБрдП рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЕрднреА рдПрдХ рд╕рдВрдмрдВрдзрд┐рдд рдмрдЧ рдорд┐рд▓рд╛ рд╣реИред
рдореЗрд░реА рдорд╢реАрди рдкрд░ dcast.data.table рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди _within_ рдПрдХ рдПрдЧреНрд░реАрдЧреЗрд╢рди рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдФрд░ рдкрд╛рд╕ рдХрд░рдирд╛ рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИ
рдЖрд░ рд╕рдВрд╕реНрдХрд░рдг 3.2.2 (2015-08-14)
рдкреНрд▓реЗрдЯрдлрд╛рд░реНрдо: x86_64-Apple-darwin13.4.0 (64-рдмрд┐рдЯ)
рдХреЗ рддрд╣рдд рдЪрд▓ рд░рд╣рд╛ рд╣реИ: рдУрдПрд╕ рдПрдХреНрд╕ 10.10.2 (рдпреЛрд╕реЗрдорд╛рдЗрдЯ)
рдбреЗрдЯрд╛.рдЯреЗрдмрд▓_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 рдХреЗрд╡рд▓ рддрднреА рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдкрд╛рд░рд┐рдд func рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдирд╛рдо рд╣рдореЗрд╢рд╛ "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)
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдЗрд╕ рдмрдЧ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдпрд╣ рд╡рд╣реА рдореБрджреНрджрд╛ рдерд╛ред рдореИрдВ dcast рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рднреАрддрд░ fun.aggregate рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛ред рдПрдХ рддреБрдЪреНрдЫ рдЙрджрд╛рд╣рд░рдг:
wrapper <- function() {
f <- function(x) list(x)
dcast(data, y ~ x + b, fun.aggragate = f)
}
рдореИрдВрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ sys.call рд╡рд╛рддрд╛рд╡рд░рдгреЛрдВ рдХреЛ рд▓рдХреНрд╖рд┐рдд рдХрд░рдХреЗ get() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ f рдЦреЛрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдерд╛ред рдореИрдВрдиреЗ рдЖрдзрд╛рд░ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗ f рдХреЛ рдПрдХ new.env() рдореЗрдВ рд╕рдВрд▓рдЧреНрди рдХрд░рдиреЗ рдХрд╛ рднреА рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ред рддреЛ рдХреНрдпрд╛ "d0rg0ld рдиреЗ 2 рдЕрдХреНрдЯреВрдмрд░, 2015 рдХреЛ рдЯрд┐рдкреНрдкрдгреА рдХреА" рдЯрд┐рдкреНрдкрдгреА рдЕрднреА рднреА рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ?
SO рдкрд░ рд╕рдВрдмрдВрдзрд┐рдд рдкреНрд░рд╢реНрди: R data.table рдлрд╝рдВрдХреНрд╢рди рдкрд╣рд▓реЗ рд╕реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрд░реНрдХ рдХреЛ рдирд╣реАрдВ рдкрд╣рдЪрд╛рдирддрд╛ рд╣реИ
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореБрджреНрджрд╛ #713 рдХреЗрд╡рд▓ рддрднреА рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ рдЬрдм рдкрд╛рд░рд┐рдд func рдХреЗ рд▓рд┐рдП рдкрд░рд┐рд╡рд░реНрддрдиреАрдп рдирд╛рдо рд╣рдореЗрд╢рд╛ "fun.aggregate" рд╣реЛрддрд╛ рд╣реИ:
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╡рд┐рдкрд░реАрдд рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: