在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的参数中是否没有一个优雅的解决方案? 感谢
编辑:不知道如何将其标记为已回答,因为答案出现在评论中,但弗兰克将其钉住了。做完了。答案 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)