给定R中的一个表达式字符串,例如Species == 'setosa' & Petal.Length > 1.5,您可以使用dplyr中的!!将该表达式传递给过滤器语句.

exp_string = rlang::parse_expr("Species == 'setosa' & `Petal.Length` > 1.5")
filtered_data <- iris |> filter(!!exp_string)

但当将其转换为data.table时,过滤会失败,并以多种方式抱怨.

iris_dt <- setDT(copy(iris))
iris_dt[exp_string] # i has evaluated to type language
iris_dt[!!exp_string] # invalid argument type

那么,将过滤语句传递给R中的data.table的正确方式是什么呢?

推荐答案

我们可以使用eval-bang bang(!!)只在潮汐环境中工作,在所有其他情况下,它是双重否定(!)

iris_dt[eval(exp_string)]

-输出

     Sepal.Length Sepal.Width Petal.Length Petal.Width Species
 1:          5.4         3.9          1.7         0.4  setosa
 2:          4.8         3.4          1.6         0.2  setosa
 3:          5.7         3.8          1.7         0.3  setosa
 4:          5.4         3.4          1.7         0.2  setosa
 5:          5.1         3.3          1.7         0.5  setosa
 6:          4.8         3.4          1.9         0.2  setosa
 7:          5.0         3.0          1.6         0.2  setosa
 8:          5.0         3.4          1.6         0.4  setosa
 9:          4.7         3.2          1.6         0.2  setosa
10:          4.8         3.1          1.6         0.2  setosa
11:          5.0         3.5          1.6         0.6  setosa
12:          5.1         3.8          1.9         0.4  setosa
13:          5.1         3.8          1.6         0.2  setosa

R相关问答推荐

使用R的序列覆盖

如何使用R中的dhrr函数将李克特量表的因子列从长转换为宽?

有没有一个R函数允许你从一个数字变量中提取一个数字,而不考虑它的位置(不仅仅是第一个或最后一个数字?

获取列中值更改的行号

如何将旋转后的NetCDF转换回正常的纬度/经度网格,并使用R?

在R中,如何将变量(A,B和C)拟合在同一列中,如A和B,以及A和C在同一面板中?

使用Facet_WRAP时更改框图中线的 colored颜色

2个Rscript.exe可执行文件有什么区别?

Select 季度月值

当我们有多个反斜杠和/特殊字符时使用Gsubing

用R ggplot2求上、下三角形中两个变量的矩阵热图

有没有可能用shiny 的书签恢复手风琴面板?

如何平滑或忽略R中变量的微小变化?

防止正则表达式覆盖以前的语句

有毒元素与表观遗传年龄的回归模型

需要一个函数来在第一行创建一个新变量,然后用新变量替换一个不同的变量(对于多行)

我已经运行了几个月的代码的`Palette()`中出现了新的gglot错误

roxygen2正在处理太多的文件

按两个条件自动过滤数据

用LOOCV进行K近邻问题