你能解释一下为什么命名这个功能" ["改变它的行为,如下例所示。?
library(data.table)
d <- data.table(data.frame(a=1:10))
class(d) <- c(class(d), "bar")
foo <- function(data, x) {
data[, .(.N), keyby=eval(substitute(x), envir=data)]
}
"[.bar" <- function(data, x) {
data[, .(.N), keyby=eval(substitute(x), envir=data)]
}
结果:
> d[a < 5]
a
1: 1
2: 2
3: 3
4: 4
> foo(d, a < 5)
substitute N
1: FALSE 6
2: TRUE 4
和
> foo(d, a)
substitute N
1: 1 1
2: 2 1
3: 3 1
4: 4 1
5: 5 1
6: 6 1
7: 7 1
8: 8 1
9: 9 1
10: 10 1
> d[a]
Error in eval(expr, envir, enclos) : object 'a' not found
他们的工作方式应该相同,不是吗?
谢谢!
答案 0 :(得分:1)
这两个输出相同。
> foo(d, a<5 )
substitute V1
1: FALSE 6
2: TRUE 4
> "[.bar"(d,a<5)
substitute V1
1: FALSE 6
2: TRUE 4
请说明您正在谈论的行为更改。
答案 1 :(得分:1)
好的,我发现问题归功于已经删除了他/她的回复的人:
class(d) <- c("bar")
foo <- function(data, x) {
data <- unclass(data)
data <- as.data.table(data)
data[, .(.N), keyby=eval(substitute(x), envir=data)]
}
"[.bar" <- function(data, x) {
data <- unclass(data)
data <- as.data.table(data)
data[, .(.N), keyby=eval(substitute(x), envir=data)]
}
如你所见,这是课堂上的问题。