Używam R i szukałem odpowiedzi, ale chociaż widziałem podobne pytania, to nie zadziałało dla mojego konkretnego problemu.Zignoruj NA w funkcji sapply
W moim zestawie danych próbuję użyć znaków NA
jako symboli zastępczych, ponieważ zamierzam do nich wrócić po tym, jak otrzymam część mojej analizy, dlatego też chciałbym móc wykonać wszystkie moje obliczenia jako jeśli NA
naprawdę tam nie było.
Oto mój problem z tabeli przykładowe dane
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"
otrzymuję błąd:
Error in if ((x) > test) { : missing value where TRUE/FALSE needed
Jak znacie, to jest coś nie tak z funkcji sapply. Wszelkie pomysły na ignorowanie tych NA
? Chciałbym spróbować na.omit
, gdybym mógł go wstawić, aby wstawić wszystkie NA
w miejscu, w którym były wcześniej, ale nie jestem pewien, jak to zrobić.
Dlaczego po prostu nie dodajemy innego polecenia if do funkcji sapply, która zwraca NA, jeśli x jest NA? Ponadto, jeśli umieścisz 'browser()' w dowolnym miejscu w twojej funkcji, zatrzyma się ono w tym miejscu, kiedy uruchomisz je następnym razem. –
Dzięki za odpowiedź! Nie jestem pewien, czy zrobiłem to prawo, ponieważ wciąż mam ten sam błąd. Oto mój kod test1 <- sapply (L, function (x) if ((x) == NA) {NA} else if ((x)> test) {1} else {0} ) i błąd jest teraz: Błąd w if ((x) == NA) {: brakująca wartość, gdy potrzebne jest PRAWDA/FAŁSZ – Tim
Musisz użyć 'is.na (x)', aby to sprawdzić. 'x == NA' zwraca NA ... – Tommy