我正在使用R并搜索了一个答案,但是尽管我看到了类似的问题,但它不适用于我的特定问题。

在我的数据集中,我尝试将NA用作占位符,因为一旦完成部分分析,我将返回到它们,因此,我希望能够像NA一样进行所有计算。 s并不是真的在那里。

这是我的示例数据表的问题

ROCA = c(1,3,6,2,1,NA,2,NA,1,NA,4,NA)
ROCA <- data.frame (ROCA=ROCA)       # converting it just because that is the format of my original data

#Now my function
exceedes <- function (L=NULL, R=NULL, na.rm = T)
 {
    if (is.null(L) | is.null(R)) {
        print ("mycols: invalid L,R.")
        return (NULL)
    }
    test <-(mean(L, na.rm=TRUE)-R*sd(L,na.rm=TRUE))
  test1 <- sapply(L,function(x) if((x)> test){1} else {0})
  return (test1)
}
L=ROCA[,1]
R=.5
ROCA$newcolumn <- exceedes(L,R)
names(ROCA)[names(ROCA)=="newcolumn"]="Exceedes1"

我收到错误消息:
Error in if ((x) > test) { : missing value where TRUE/FALSE needed

你们知道,sapply函数有问题。关于如何忽略那些NA的任何想法?如果可以让na.omit插入所有NA的正确位置,我会尝试使用ojit_code,但是我不确定该怎么做。

最佳答案

这句话很奇怪:

test1 <- sapply(L,function(x) if((x)> test){1} else {0})

尝试:
test1 <- ifelse(is.na(L), NA, ifelse(L > test, 1, 0))

关于function - 忽略NA在sapply函数中的作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6499905/

10-16 06:52