r-将变量作为data.table列名传递

r-将变量作为data.table列名传递,r,data.table,R,Data.table,我使用的越多,数据就越多。table正在取代dplyr成为我的“goto”软件包,因为它提供的速度是一个很大的优势 问题 在不创建表达式的情况下,能否将变量传递给data.table(dt[i,j])中的i 示例 给定一个data.table: library(data.table) dt <- data.table(val1 = c(1,2,3), val2 = c(3,2,1)) 但是使用变量来引用列名。比如说, myCol <- c("val

我使用的越多,数据就越多。table正在取代dplyr成为我的“goto”软件包,因为它提供的速度是一个很大的优势

问题

在不创建
表达式的情况下,能否将变量传递给data.table(
dt[i,j]
)中的
i

示例

给定一个data.table:

library(data.table)
dt <- data.table(val1 = c(1,2,3),
                 val2 = c(3,2,1))
但是使用变量来引用列名。比如说,

myCol <- c("val1", "val2")  ## vector of column names
或者,
表达式
路由是否应该这样做?

我们可以使用
eval(as.name(…

或者我们可以在
.SDcols

dt[dt[, .I[.SD[[1]]> .SD[[2]]], .SDcols= myCol]]
或者使用@thelatemail的
get
选项

dt[get(myCol[1]) > get(myCol[2])]
如果只有两个元素,我们也可以使用
Reduce
mget
(与@thelatemail的答案略有不同)


如果说
eval(as.name(…)==get()
?@tospig这会给出更多的想法。
dt[(myCol[1] > myCol[2])] 
dt[eval(as.name(myCol[1]))> eval(as.name(myCol[2]))]
dt[dt[, .I[.SD[[1]]> .SD[[2]]], .SDcols= myCol]]
dt[get(myCol[1]) > get(myCol[2])]
dt[Reduce('>', mget(myCol))]