1
您能解釋一下爲什麼命名函數「[」會改變它的行爲,如下面的例子..?R:「[」函數的行爲與名爲「foo」的行爲不同
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
他們應該工作一樣,是不是?
謝謝!
你的問題不清楚。預期的輸出是什麼,錯誤是什麼?另外,因爲你沒有定義'f',所以'f(d,a)'是什麼? – Ujjwal 2014-10-09 09:05:18
@Tim關於錯誤,請嘗試'd [(a)]' – akrun 2014-10-09 09:34:43