有时当尝试用自己的某些函数替换一堆列时,我想尝试为简约性进行就地分配,但它不起作用。
例如:dt<-data.table(id=1:5,asdf=rnorm(5),hjkl=rnorm(5))
;标准方法是使用:=
和.SDcols
:
dt[,c("asdf","hjkl"):=lapply(.SD,median),.SDcols=c("asdf","hjkl")]
# - or -
vars<-c("asdf","hjkl")
dt[,(vars):=lapply(.SD,median),.SDcols=vars]
但我很想结合后一种方法的步骤, a la :
dt[,(vars<-c("asdf","hjkl")):=lapply(.SD,mean),.SDcols=vars]
# - or -
dt[,(vars):=lapply(.SD,mean),.SDcols=vars<-c("asdf","hjkl")]
但都失败了:object 'vars' not found
。
为什么这些尝试都不起作用?
我的第一个想法是关于任务的范围,但后来我认为一个会工作而另一个不会 - 即vars
首先用.SDcols
或LHS的LHS声明:=
,并且随后只能用于其他程序。但两者似乎都是本地的。
答案 0 :(得分:-1)
为什么不呢?
dt[, .(asdf, hjkl)][, lapply(.SD, mean)]