我已经养成了访问 data.table 列的习惯,j
即使我不需要:
require(data.table)
set.seed(1); n = 10
DT <- data.table(x=rnorm(n),y=rnorm(n))
frm <- formula(x~y)
DT[,lm(x~y)] # 1 works
DT[,lm(frm)] # 2 fails
lm(frm,data=DT) # 3 what I'll do instead
我希望# 2 能够工作,因为lm
应该在全局环境中搜索变量DT
......有没有一种优雅的方法可以让# 2 这样的东西工作?
在这种情况下,我使用的是lm
,它带有一个“数据”参数,所以 #3 工作得很好。
编辑。请注意,这有效:
x1 <- DT$x
y1 <- DT$y
frm1 <- formula(x1~y1)
lm(frm1)
这也是:
rm(x1,y1)
bah <- function(){
x1 <- DT$x
y1 <- DT$y
frm1 <- formula(x1~y1)
lm(frm1)
}
bah()
编辑2。但是,这失败了,说明了@eddi 的答案
frm1 <- formula(x1~y1)
bah1 <- function(){
x1 <- DT$x
y1 <- DT$y
lm(frm1)
}
bah1()