Скрытие NaN в ноль в коде R - PullRequest
0 голосов
/ 01 мая 2018

Это часть моего кода R:

for (i in 1:n) {

...

Smw[i]<-(mw[i]-Emw[i])/(Vmw[i]^(0.5)

...

}

и я получаю этот вывод

>Smw
 [1] 1.4205658 1.4357139 0.6331807 0.5006390 1.0186496 0.7762059 0.7129556 1.2702147 0.9721943
[10] 1.1156639 0.6908741 0.9994839 0.4976403 0.6265969 0.8362247 0.9150794 1.4028611 1.8190172
[19] 1.4290714 1.2475859 1.2874732 1.0358361 0.7494117 0.4077862 0.7082040 0.6408069 0.5158288
[28] 0.8990276 1.3660975 0.9901475 1.3291363 1.5966929 1.3004625 1.6013889 1.8312262 1.8797908
[37] 1.4265688 1.2947859 1.2763606 0.7276069 0.1641367 0.0000000 0.0000000 0.0000000 0.0000000
[46] 0.5363989 0.8374326 0.4455664 1.4205658       **NaN**

и я хочу продолжить с

ooc=Cplus>5

lenOOC = sum(ooc)

lenOOC

Я не смог получить sum(ooc), поскольку в моих данных есть NaN . Как я могу преобразовать NaN в ноль? Мои данные Smw могут содержать отрицательные значения, поэтому max() не подходит.

1 Ответ

0 голосов
/ 01 мая 2018

Это очень просто исправить с помощью линейного вкладыша R, используя функцию is.na для индексации вектора

Smw[is.na(Smw)] <- 0

Это сделает вашу работу суммирования. Тем не менее, может быть более целесообразным сохранить ваш NaN, так как это может быть полезно позже. Возможно, поэтому лучше использовать na.rm внутри функции sum, чтобы вы необратимо не изменяли информацию.

sum(Smw, na.rm = TRUE)

Например:

> x <- c(2, 8, NaN)
> sum(x)
NaN
> sum(x, na.rm = T)
10
> x
  2   8 NaN
...