2

data.table バージョン 1.8.8 を使用。なぜこれが機能するのですか:

dat <- data.table(a=1:5,b=5:1)
sdat <- dat[,lapply(.SD,function(x) x*b)]

でもこれは

dat <- data.table(a=1:5,b=5:1)
f <- function(x) x*b
sdat <- dat[,lapply(.SD,f)]

与える

Error in FUN(X[[1L]], ...) : object 'b' not found

不足しているものはありますか?

4

2 に答える 2

3

私はこれfをバグabは呼びません。(より正確には、渡されています)vectorsx.SD

したがって、abが 内に存在している間j、関数の本体は内fで評価されませんj

説明のために、実行すると何が起こるかを見てください

with(dat, f(a))

b名前の一貫性に依存しないように、関数の引数を作成することをお勧めします。

f = function(x,b) x * b
dat[,sapply(.SD, f, b=b)]
于 2013-09-18T15:39:58.037 に答える