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

时间:2017-03-01 10:45:39

标签: r data.table

data.table中将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

请注意,如果没有.SDcols,则不会发生这种情况:

mtcarsDT[, lapply(.SD, median)]
#     mpg cyl  disp  hp  drat    wt  qsec vs am gear carb
# 1: 19.2   6 196.3 123 3.695 3.325 17.71  0  0    4    2
mtcarsDT[, lapply(.SD, get(fun))] 
#     mpg cyl  disp  hp  drat    wt  qsec vs am gear carb
# 1: 19.2   6 196.3 123 3.695 3.325 17.71  0  0    4    2

我想知道是否有人可以阐明这种行为:这是一个错误还是一个功能?在后一种情况下,我如何推断列出现的顺序?

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

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

现在产生不正确的结果。

0 个答案:

没有答案