假设我读取了一些包含要在数据集中进行的操作的文件,作为示例
library(data.table)
dt = setDT(mtcars)
exp1 = "cyl == 8 & mpg > 16"
exp2 = "cyl == 6 & mpg < 20"
在这种情况下,
exp1
和exp2
从文件中作为文本读取,有没有办法做这样的事情
dt[eval(exp1)]
dt[eval(exp2)]
使用文本表达式对数据进行子集化并进行其他数据转换?
编辑:
如果我做类似的事情
exp1 = quote(cyl == 8 & mpg > 16)
dt[eval(exp1)]
它有效,但是我如何让存储到文本中的数据使用这种引用方法呢?还有使用这个方法有什么问题吗?
在不使用
eval
的情况下执行此操作
library(data.table)
dt <- as.data.table(mtcars)
exp1 = "cyl == 8 & mpg > 16"
do.call("[", list(dt, str2lang(exp1)))
给予
mpg cyl disp hp drat wt qsec vs am gear carb
<num> <num> <num> <num> <num> <num> <num> <num> <num> <num> <num>
1: 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
2: 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
3: 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
4: 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2