R 强制计算data.table中的.SD
为了调试data.table中的R 强制计算data.table中的.SD,r,data.table,lazy-evaluation,R,Data.table,Lazy Evaluation,为了调试data.table中的j,我更喜欢使用browser()交互式地检查-dt产生的-。解决了这个问题,我知道为了计算所有列,必须在j中调用.SD。我使用Rstudio和使用该方法时,存在两个问题: “环境”窗格不会更新以反映浏览器环境 我经常遇到以下错误消息 我可以通过以下方式解决这个问题: f <- function(sd=force(.SD),.env = parent.frame(n = 1)) { by = .env$.BY; i = .env$.I; sd =
j
,我更喜欢使用browser()
交互式地检查-dt产生的-。解决了这个问题,我知道为了计算所有列,必须在j
中调用.SD。我使用Rstudio和使用该方法时,存在两个问题:
“环境”窗格不会更新以反映浏览器环境
我经常遇到以下错误消息
我可以通过以下方式解决这个问题:
f <- function(sd=force(.SD),.env = parent.frame(n = 1)) {
by = .env$.BY;
i = .env$.I;
sd = .env$.SD;
grp = .env$.GRP;
N = .env$.N;
browser()
}
library (data.table)
setDT(copy(mtcars))[,f(.SD),by=.(gear)]
据我所知,,
data.table
需要明确查看传递给j
的代码中的.SD
,
否则,它甚至不会在为执行而创建的环境中公开它。
例如,见
为什么不创建一个不同的助手函数,它总是在j
中指定.SD
?
比如:
dt_debugger <- function(dt, ...) {
f <- function(..., .caller_env = parent.frame()) {
by <- .caller_env$.BY;
i <- .caller_env$.I;
sd <- .caller_env$.SD;
grp <- .caller_env$.GRP;
N <- .caller_env$.N;
browser()
}
dt[..., j = f(.SD)]
}
dt_debugger(as.data.table(mtcars), by = .(gear))
dtu调试器
setDT(copy(mtcars))[,f(),by=.(gear)]
dt_debugger <- function(dt, ...) {
f <- function(..., .caller_env = parent.frame()) {
by <- .caller_env$.BY;
i <- .caller_env$.I;
sd <- .caller_env$.SD;
grp <- .caller_env$.GRP;
N <- .caller_env$.N;
browser()
}
dt[..., j = f(.SD)]
}
dt_debugger(as.data.table(mtcars), by = .(gear))