2013-12-16 2 views
0

Каков правильный способ написания, если синтаксис на R?double if condition in r language синтаксис

С:

for (i in 1:200) { 
    if((time[i]<731) | (time[i]==NA)) { x[i] <- NA } 
} 

я получаю:

missing value where TRUE/FALSE needed 

Идея заключается в том, чтобы сократить начало временных рядов для вычисления статистики. x и time оба являются числовыми. Кроме того, этот вопрос не является точным дубликатом, другой пост имеет дело с оператором & & и нет foo == NA, но foo == 0. Я думал, что | или || будет работать как (TRUE | NA) = TRUE, но кажется, что я ошибался.

ответ

2

Вы не можете писать такие вещи как if (foo==NA) потому что сравнение ничего с NANA. Вместо этого попробуйте

if(is.na(foo)) 
+0

@joran очень любезный удалить ваш ответ -I думал, что ты избил меня. –

+0

Ваш уже был там, когда я попал в submit. В любом случае, Джошуа нашел хороший дубликат. – joran

+0

ok попробует это – user3083324

0

Попробуйте

is.na(x) <- (time < 731 | is.na(time)) 
+0

это не работает, все, что он делает сделайте x полным с NA от начала до конца. – user3083324

+0

@ user3083324 Была опечатка. Попробуйте обновленную версию. –

0

Предполагая, что вы хотели:

> n = 10 
> x <- rep(0, n) 
> time <- rpois(n, 731) 
> 
> for (i in 1:n) { 
+ if(time[i] < 731 | is.na(time[i])) { 
+  x[i] <- NA 
+ } 
+ } 
> x 
[1] 0 0 NA NA NA 0 NA NA 0 0 

Вы можете сделать:

> ifelse(time < 731 | is.na(time[i]), NA, x) 
[1] 0 0 NA NA NA 0 NA NA 0 0