apply函数中的布尔运算符给出错误输出

时间:2014-10-22 19:50:35

标签: r boolean apply

我正在尝试使用apply函数迭代数据框,如果数据框中的两列都大于或等于9,则输出TRUE。我的代码在下面显示我是如何尝试这样做的,以及示例输出。但是,当我查看输出时,所有输出值都是FALSE,即使它们应该为TRUE。

#Function to remove any proteins that have a certain number of NA values
RemoveNA <- function(input){
    file <- read.table(input, header = TRUE, sep = "\t", stringsAsFactors = FALSE)
    numrows <- nrow(file)
    #Set groups
    Adj <- file[,3:12]
    Non <- file[,13:22]
    #Count the number of values that are not NA in each group
    AdjSum <- rowSums(!is.na(Adj))
    NonSum <- rowSums(!is.na(Non))
    combined <- data.frame(AdjSum, NonSum)
    d <- apply(combined, 1, function(x) x[1] >= 9 & x[2] >= 9)
    d2<-is.data.frame(d)
    newcombined <- data.frame(AdjSum, NonSum, d2)
    print(head(newcombined))
}

输出:

      AdjSum NonSum    d2
   1     10     10 FALSE
   2     10     10 FALSE
   3     10     10 FALSE
   4      0      1 FALSE
   5      1      1 FALSE
   6      0      1 FALSE

这段代码有什么问题吗?

此代码的最终目标实际上是获取文件并根据存在的NA值确定要保留的行。

感谢您的帮助,
Allison G。

1 个答案:

答案 0 :(得分:1)

或者

 dat$d2 <- rowSums(dat>9)==ncol(dat)

数据

 dat <- structure(list(AdjSum = c(10L, 10L, 10L, 0L, 1L, 0L), NonSum = c(10L, 
 10L, 10L, 1L, 1L, 1L)), .Names = c("AdjSum", "NonSum"), class = "data.frame", row.names = c("1", 
 "2", "3", "4", "5", "6"))