涉及`.SDcols`的作业范围/顺序

时间:2015-07-04 05:18:47

标签: r data.table

有时当尝试用自己的某些函数替换一堆列时,我想尝试为简约性进行就地分配,但它不起作用。

例如: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声明:=,并且随后只能用于其他程序。但两者似乎都是本地的。

1 个答案:

答案 0 :(得分:-1)

为什么不呢?

dt[, .(asdf, hjkl)][, lapply(.SD, mean)]