data.table如果变量名存储在字符向量中,如何引用变量?例如,这适用于data.frame:
df <- data.frame(col1 = 1:3)
colname <- "col1"
df[colname] <- 4:6
df
# col1
# 1 4
# 2 5
# 3 6
Run Code Online (Sandbox Code Playgroud)
如何使用或不使用:=表示法对data.table执行相同的操作?显而易见的事情是dt[ , list(colname)]行不通的(我也没想到).
我想通过将sort.field传递给函数来进行绝对降序排序(即排序忽略符号,例如5,data.table-2,1).
我看过降序排序,但在我的努力中我得到错误或者我正在改变变量的符号,而不是正确排序.
这有效:
library(data.table)
DT <- data.table(id = c("a","b","z"),
score = c(1, 5, -2))
DT1 <- copy(DT)
#doing sort direct works
DT1 <- DT1[order(-abs(score))]
# i.e. b, Z, a
Run Code Online (Sandbox Code Playgroud)
但是当传递参数时,我找不到正确的语法(数学错误,必须提供j,等等)
#in function
sort.field = "score"
sortme <- function(dt, sort.field){
dt <- dt[order(-abs(sort.field))]
}
DT2 <- sortme(DT, sort.field)
# ERROR get non-numeric argument to maths function as it sees string
Run Code Online (Sandbox Code Playgroud)
我尝试了各种各样的evals,as.name,= F等.
dt <- dt[, order(-abs(as.name(sort.field))]
# even
expr <- substitute(x := -abs(x), list(x=as.name(sort.field)))
dt<- …Run Code Online (Sandbox Code Playgroud)