Непонятная ошибка с for в R; NaN - PullRequest
1 голос
/ 08 марта 2019

Я выполняю код для использования в симуляторе вероятности, который генерирует ошибку.Например, код может быть следующим:

m<-replicate(101,NaN)
for(i in seq(0,1, by=0.01)){

  m[(i*100)+1]<-i+1
}

print(m)

, он генерирует ошибку в m [30] и в m [59], поскольку значение равно NaN.Выходной вектор следующий:

 [1] 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11 1.12 1.13 1.14
 [16] 1.15 1.16 1.17 1.18 1.19 1.20 1.21 1.22 1.23 1.24 1.25 1.26 1.27 1.29  NaN
 [31] 1.30 1.31 1.32 1.33 1.34 1.35 1.36 1.37 1.38 1.39 1.40 1.41 1.42 1.43 1.44
 [46] 1.45 1.46 1.47 1.48 1.49 1.50 1.51 1.52 1.53 1.54 1.55 1.56 1.58  NaN 1.59
 [61] 1.60 1.61 1.62 1.63 1.64 1.65 1.66 1.67 1.68 1.69 1.70 1.71 1.72 1.73 1.74
 [76] 1.75 1.76 1.77 1.78 1.79 1.80 1.81 1.82 1.83 1.84 1.85 1.86 1.87 1.88 1.89
 [91] 1.90 1.91 1.92 1.93 1.94 1.95 1.96 1.97 1.98 1.99 2.00

Спасибо за помощь

Ответы [ 2 ]

5 голосов
/ 08 марта 2019

Проблема - это вариант эффектов, обсуждаемых в этом посте: Почему эти числа не равны?

Числовые ошибки округления приводят к нецелым индексным числам в m[(i*100)+1] Попробуйте вместо этого использовать целые числа:

for(i in seq(0,100)){    
  m[i+1] <- i/100 + 1
}
3 голосов
/ 08 марта 2019

Вы можете решить эту проблему, округлив значения индекса:

for(i in seq(0,1, by=0.01)){
  m[round((i*100)+1)]<-i+1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...