【问题标题】:Table Generation issue in RR中的表生成问题
【发布时间】:2015-06-03 05:50:21
【问题描述】:

我试图在 R 中运行这个简单的代码,这就是我得到的:

table <- matrix(NA, nrow=10, ncol=1)
for (i in seq(0.01, 0.10, by=0.01)) {
  table[i*100, ] <- i
}
table
#      [,1]
# [1,] 0.01
# [2,] 0.02
# [3,] 0.03
# [4,] 0.04
# [5,] 0.05
# [6,] 0.07
# [7,]   NA
# [8,] 0.08
# [9,] 0.09
#[10,] 0.10

如果我向后运行我的代码,它可以正常工作:

table <- matrix(NA, nrow=10, ncol=1)
for (i in seq(0.1, 0.01, by=-0.01)) {
  table[i*100, ] <- i
}
table
#      [,1]
# [1,] 0.01
# [2,] 0.02
# [3,] 0.03
# [4,] 0.04
# [5,] 0.05
# [6,] 0.06
# [7,] 0.07
# [8,] 0.08
# [9,] 0.09
#[10,] 0.10

有人知道怎么回事吗?

我在 Mac 上使用 R 版本 3.2.0。

【问题讨论】:

  • 查看all.equal(seq(0.01, 0.10, by=0.01)[7], 7)的结果。还有stackoverflow.com/a/9508558/3710546
  • 结果是“平均相对差:99”。我不明白这与我的问题有什么关系。你能解释一下吗?
  • 表示0.07*100不等于7,从浮点数角度看:cran.r-project.org/doc/FAQ/…
  • 这是计算机科学中的一个已知问题。考虑以不同的方式创建表。 matrix(seq(0.01, 0.10, by=0.01), nrow=10, ncol=1)
  • 谢谢!但是为什么它会写入第 6 行呢?它不应该四舍五入并写入第 7 行吗?

标签: r for-loop matrix


【解决方案1】:

这与舍入有关。您没有使用更多数字和乘以 100 来处理向量的相同分量:

    options(digits = 22)
     > seq(0.01, 0.10, by=0.01)*100
     [1]  1.000000000000000000000  2.000000000000000000000  3.000000000000000000000  4.000000000000000000000  5.000000000000000000000  6.000000000000000888178  6.999999999999999111822  8.000000000000000000000  9.000000000000000000000 10.000000000000000000000
     > seq(0.1, 0.01, by=-0.01)*100
     [1] 10.000000000000000000000  9.000000000000001776357  8.000000000000000000000  7.000000000000000888178  6.000000000000000888178  5.000000000000000000000  4.000000000000000888178  3.000000000000000000000  2.000000000000000444089  1.000000000000000888178

【讨论】:

  • 为什么升序只有7个?
  • 如您所见,只有数字的整数部分用于向量的索引。 6.999999999999999111822 在这个意义上等于 6。您需要避免使用十进制数字进行这种索引。
  • 我不认为这是@user4968068 的要求。他或她有兴趣知道为什么它在向后索引时起作用。我猜这是函数的内部工作,但我对函数不够熟悉,无法挖掘细节。
猜你喜欢
  • 2017-08-02
  • 1970-01-01
  • 2016-03-02
  • 2015-10-29
  • 1970-01-01
  • 2011-06-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多