我正在构建一个gui,它允许我通过单击各种因子名称来选择data.frame的子集.收到用户输入后,如何将其传递给子集功能?
例如:我在列timeofday中有一个数据帧df,其中包含MORNING和EVENING,在列optype中有RECEIVE和SEND.从GUI我知道用户想要一个只包含RECEIVE操作的子集,所以我也有以下字符串:
RequestedFactor1等于"optype"
RequestedRelationship1等于"=="
RequestedValue1等于"RECEIVE"
我可以对这些字符串做什么来将它们传递给子集,这样我就会收到相同的输出,就像我调用子集一样(df,optype =="RECEIVE")?
TIA
为此,您可以使用eval-parse构造,但是我再次警告这实际上是棘手的事情。请非常仔细地阅读有关这两个的帮助文件。因此,在您的情况下,它变为:
subset(df,eval(parse(text=paste(RF1,RR1,RV1))))
Run Code Online (Sandbox Code Playgroud)
一个例子来说明一些棘手的部分:
> RF1 <- "optype"
> RR1 <- "=="
> RV1 <- "\"RECEIVE\""
> optype <- c("RECEIVE","Not")
> ifelse(eval(parse(text=paste(RF1,RR1,RV1))),1,0)
[1] 1 0
Run Code Online (Sandbox Code Playgroud)
注意转义的引号(\“)。这是必需的,因为您要针对字符串而不是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
Run Code Online (Sandbox Code Playgroud)