作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
TL;DR:我怎样才能通过 fun.aggregate
进入 dcast.data.table
当调用dcast.data.table
在函数内完成(我将 fun.aggregate
传递给该函数)?
我有一张这样的 table :
library(data.table)
t <- data.table(id=rep(1:2, c(3,4)), k=c(rep(letters[1:3], 2), 'c'), v=1:7)
t
id k v
1: 1 a 1
2: 1 b 2
3: 1 c 3
4: 2 a 4
5: 2 b 5
6: 2 c 6
7: 2 c 7 # note the duplicate (2, c)
dcast.data.table(t, id ~ k, value.var='v', fun.aggregate=last) # last is in data.table
id a b c
1: 1 1 2 3
2: 2 4 5 7
dcast.data.table
调用一个函数:
f <- function (tbl, fun.aggregate) {
dcast.data.table(tbl, id ~ k, value.var='v', fun.aggregate=fun.aggregate)
}
f(t, last)
Error in `[.data.table`(data, , eval(fun.aggregate), by = c(ff_)) :
could not find function "fun.aggregate"
fun.aggregate
正在评估(
eval(fun.aggregate)
)但未找到(因为函数“fun.aggregate”不存在)。
fun.aggregate
进入 f
?
quote
,
substitute
等有关,但我对这些功能非常挣扎,我通常只是将它们随机链接在一起,直到某些东西起作用)。
> sessionInfo()
R version 3.1.0 (2014-04-10)
Platform: x86_64-pc-linux-gnu (64-bit)
...
other attached packages:
[1] data.table_1.9.3
eval()
的影响称呼?
最佳答案
现在已在 commit 1303 中修复。来自 v 1.9.3 - 当前的开发版本。来自 NEWS :
dcast.data.table
handlesfun.aggregate
argument properly when called from within a function that acceptsfun.aggregate
argument and passes todcast.data.table()
. Closes #713. Thanks to mathematicalcoffee for reporting here on SO.
dcast.data.table
中还有一个小疏忽。现在已修复 -
#715 .
last
函数不会为所有输入值生成长度为 1 的值 - 这是
fun.aggregate
的要求.
last(integer(0))
# [1] integer(0)
fill
参数未设置,这是用于填充缺失组合的值。这个案子以前没有被抓到,但现在已经解决了。
tt <- t[1:5] # t is from your example
dcast.data.table(tt, id ~ k, fun.aggregate=last)
# Error in dcast.data.table(tt, id ~ k, fun.aggregate = last) :
# Aggregating function provided to argument 'fun.aggregate' should always return
# a length 1 vector, but returns 0-length value for fun.aggregate(integer(0)).
# This value will have to be used to fill missing combinations, if any, and
# therefore can not be of length 0. Either override by setting the 'fill' argument
# explicitly or modify your function to handle this case appropriately.
dcast.data.table(tt, id ~ k, fun.aggregate=last, fill=NA)
# id a b c
# 1: 1 1 2 3
# 2: 2 4 5 NA
关于r - 如何将 fun.aggregate 作为参数传递给 dcast.data.table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24542976/
我是一名优秀的程序员,十分优秀!