帮助减少处理单列参数

时间:2014-04-11 19:26:14

标签: r

this question的后续版中,我在使用Reduce功能时遇到了一些问题。我用它来组合数据帧中的逻辑向量,并返回所有逻辑都为真的记录:

testdf <- structure(list(idx = c(1, 2, 3, 4, 5), logical.1 = c(TRUE, TRUE, 
FALSE, FALSE, TRUE), logical.2 = c(FALSE, TRUE, FALSE, FALSE, 
TRUE)), .Names = c("idx", "logical.1", "logical.2"), row.names = c(NA, 
-5L), class = "data.frame")

Reduce('&',testdf[,2:3],)
到目前为止一切顺利。问题是如果只有一个逻辑向量,Reduce会返回一个假值

Reduce('&',testdf[,2],)

在单个逻辑向量的情况下我想要它做的是返回该向量为True的记录,基本上

testdf[testdf$logical.1, ]

这可以通过在Reduce调用之前进行一些编码来完成,但是我想知道在Reduce的参数中是否没有一个优雅的解决方案? 感谢

编辑:不知道如何将其标记为已回答,因为答案出现在评论中,但弗兰克将其钉住了。做完了。

1 个答案:

答案 0 :(得分:1)

这样做:

Reduce('&',testdf[,2,drop=FALSE],)

我认为这是有效的,因为Reduce的第二个参数现在是一个列表,而不是一个向量。


如果你正在做一个功能......

allCols <- function(DF,cols){
  Reduce('&',testdf[,cols,drop=FALSE],)
}

# testing
allCols(testdf,2)
allCols(testdf,2:3)