R中难以理解的错误;为NaN

问题描述 投票:1回答:2

我执行一个在概率模拟器中使用的代码,它会产生错误。对于instante,代码可以是下一个:

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

谢谢你的帮助

r
2个回答
5
投票

问题是这篇文章中讨论的效果的变体:Why are these numbers not equal?

数值舍入误差导致m[(i*100)+1]中的非整数索引号尝试使用整数代替:

for(i in seq(0,100)){    
  m[i+1] <- i/100 + 1
}

3
投票

您可以通过舍入索引值来解决此问题:

for(i in seq(0,1, by=0.01)){
  m[round((i*100)+1)]<-i+1
}
© www.soinside.com 2019 - 2024. All rights reserved.