我正在构建一个GUI,通过单击各种因子名称,我可以选择data.frame的子集。
收到用户输入后,如何将其传递给子功能?

例如:我有一个数据框df,列timeofday中有MORNING和EVENING因子,列optype中有RECEIVE和SEND因子。从GUI中,我知道用户想要一个仅包含RECEIVE操作的子集,因此我也具有以下字符串:

等于“ optype”的RequestedFactor1
RequestedRelationship1等于“ ==”
等于“ RECEIVE”的RequestedValue1

我该如何处理这些字符串以将其传递给子集,以便获得与调用子集(df,optype ==“ RECEIVE”)相同的输出?

TIA

最佳答案

为此,您可以使用eval-parse构造,但是我再次警告这实际上是棘手的事情。请非常仔细地阅读有关这两个的帮助文件。因此,在您的情况下,它变为:

subset(df,eval(parse(text=paste(RF1,RR1,RV1))))


一个例子来说明一些棘手的部分:

> RF1 <- "optype"

> RR1 <- "=="

> RV1 <- "\"RECEIVE\""

> optype <- c("RECEIVE","Not")

> ifelse(eval(parse(text=paste(RF1,RR1,RV1))),1,0)
[1] 1 0


注意转义的引号(\“)。这是必要的,因为您想针对字符串而不是RECEIVE对象进行测试。或者,您可以执行以下操作:

> RF1 <- "optype"

> RR1 <- "=="

> RV1 <- "Text"

> optype <- c("RECEIVE","Not")

> Text <- "RECEIVE"

> ifelse(eval(parse(text=paste(RF1,RR1,RV1))),1,0)
[1] 1 0

10-08 09:42