动态评估r中的条件表达式

时间:2014-03-27 07:11:07

标签: r

假设我有一个数据框

x1 <- c(1, 2, 3)
x2 <- c("a", "a", "c")
x3 <- c(10, 33, 45)
x <- data.frame(x1, x2, x3)

dimensions <- c("x1", "x2")
operators <- c(">", "==")
conditions <- c(1, "a")

理想情况下,输出应该等效于以下表达式

x.filtered <- which(x$x1 > 1 & x$x2 == "a")

如何使用“维度”,“运算符”和“条件”向量动态设置和评估上述表达式?

提前致谢。

2 个答案:

答案 0 :(得分:2)

一种可能性:

expr <- paste(dimensions, operators, conditions, collapse=" & ")
expr <- gsub("(?<=(= ))(\\w+\\b)", "'\\2'", expr, perl=T)
# or
expr <- gsub("(?<=(= ))([^0-9[:punct:]]+\\b)", "'\\2'", expr, perl=T)
filter <- eval(parse(text=expr), envir=x)
# then if you really need it you can use which
which(filter) 

答案 1 :(得分:0)

好的,经过一番摆弄,我找到了解决问题的方法

text1 = paste("x[", '"', dimensions[1],'"',"]", operators[1],'"',conditions[2],'"', sep="")
eval(parse(text = text1))
which(eval(parse(text = text1)))

我可以使用循环和intersect()来迭代每个条件。对此解决方案的任何其他改进都是最受欢迎的。

希望这有帮助!!!