我正在使用R,並且搜索了周圍的答案,但是當我看到類似的問題時,它不適用於我的具體問題。忽略NA的sapply函數
在我的數據集中,我嘗試使用NA
作爲佔位符,因爲一旦我完成了部分分析,我將返回給它們,因此,我希望能夠將所有計算結果作爲如果NA
的不在那裏。
下面是一個示例數據表
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
的權利,但我不知道如何做到這一點。
爲什麼不只是將另一個if語句添加到sapply函數中,如果x是NA,則返回NA?另外,如果您將'browser()'放在函數中的任何位置,那麼當您下次運行它時,它將在該位置暫停。 –
感謝您的迴應!我不確定我是否做到了這一點,但是我仍然得到同樣的錯誤。這裏是我的代碼test1 < - sapply(L,function(x)if((x)== NA){NA} else if((x)> test){1} else {0} )現在:if((x)== NA)錯誤{:缺少值,其中TRUE/FALSE required – Tim
您必須使用'is.na(x)'來檢查它。 'x == NA'會返回NA ... – Tommy