3
爲什麼complete.cases
或anyNA
都不會爲第1行返回FALSE?根據他們的文檔,似乎他們應該......我閱讀文檔錯誤嗎?complete.cases和anyNA在行中不檢測NA?
csv<-data.frame(c(100,50,100),c(1,1,1),c(NA,12,NA))
csv$complete<-apply(csv,1,function(x){x[1]==100 && x[2]==1 && complete.cases(x)}) #check that column_1==100, and column_2=1, and no missing values in the row
csv$complete2<-apply(csv,1,function(x){x[1]==100 && x[2]==1 && anyNA(x, recursive = FALSE)})
> csv
c.100..50..100. c.1..1..1. c.NA..12..NA. complete complete2
1 100 1 NA TRUE TRUE
2 50 1 12 FALSE FALSE
3 100 1 NA TRUE TRUE
你可以考慮這個。 TRUE && complete.cases(c(1,2,NA))'這是'TURE && c(TRUE,TRUE,FALSE)'並返回'TRUE'。我猜只有在使用'&&'時纔會使用第一個TRUE,您可以在函數中嘗試使用'&'。 – Psidom
'anyNA'似乎按照您的預期工作(如果至少有一個NA和FALSE,則爲TRUE)。如@Psidom所示,'complete.cases'爲行的每個元素返回一個具有單獨真值的向量。 'isTRUE(c(TRUE,TRUE,FALSE))'返回'FALSE',所以@Psidom可能是正確的,R只查看那個向量的第一個值。實際上,如果切換第1列和第3列,則第一次邏輯測試會返回「FALSE FALSE FALSE」,這也表明僅使用由'complete.cases'返回的矢量的第一個元素。 – eipi10
有趣的是,爲什麼不用'!isTRUE(anyNA(x,recursive = FALSE))替換'anyNA()'給出正確的結果?我只是用'isTRUE(anyNA(c(1,2,NA)))'來測試它,並且如預期的那樣它返回TRUE – Rilcon42