R中for的无法理解的错误; N

时间:2019-03-08 20:20:04

标签: r

我执行一个用于概率模拟器的代码,该代码会产生错误。对于实例,代码可以是下一个:

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 个答案:

答案 0 :(得分:5)

问题是本文讨论的影响的变体:Why are these numbers not equal?

数字舍入错误导致m[(i*100)+1]中的非整数索引号 尝试改用整数:

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

答案 1 :(得分:3)

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

for(i in seq(0,1, by=0.01)){
  m[round((i*100)+1)]<-i+1
}