R 为什么data.table会更改列的顺序?

R 为什么data.table会更改列的顺序?,r,data.table,R,Data.table,在将J中的get与.SDcols组合时,我遇到了数据表的以下令人费解的行为(对我来说):列顺序没有保留,如中所示: mtcarsDT <- setDT(copy(mtcars)) vars <- c( "disp", "hp", "mpg") fun <- "median" mtcarsDT[, lapply(.SD, median), .SDcols = vars] # disp hp mpg # 1: 196.3 123 19.2 mtcarsDT[, lapp

在将J中的
get
.SDcols
组合时,我遇到了
数据表的以下令人费解的行为(对我来说):列顺序没有保留,如中所示:

mtcarsDT <- setDT(copy(mtcars))
vars <- c( "disp", "hp", "mpg")
fun <- "median"
mtcarsDT[, lapply(.SD, median), .SDcols = vars]
#     disp  hp  mpg
# 1: 196.3 123 19.2
mtcarsDT[, lapply(.SD, get(fun)), .SDcols = vars] 
#     mpg  disp  hp
# 1: 19.2 196.3 123
我想知道是否有人能解释这种行为:它是一个bug还是一个特性?在后一种情况下,如何推断列的显示顺序

最后,我想根据原始变量名命名新列,调用如下:

newVars <- paste0(vars, "_median")
mtcarsDT[, (newVars) := lapply(.SD, get(fun)), .SDcols = vars]

newVars您可以只使用
mtcarsDT[,lapply(.SD,fun),.SDcols=vars]
?从“目测”开始,看起来没有
get
,在
.SDcols
中给出的顺序就是返回列的顺序。使用
get
,原始data.table中列的顺序将被保留。它在此处作为错误归档:
newVars <- paste0(vars, "_median")
mtcarsDT[, (newVars) := lapply(.SD, get(fun)), .SDcols = vars]