我遇到了R(R-3.0.3)如何在矩阵中处理Inf
的意外(对我而言)行为。
scalar <- 1
mat1 <- matrix(0)
mat2 <- matrix(1)
mat2 <- -log(mat2)
# > mat1
# [,1]
# [1,] 0
#
# > mat2
# [,1]
# [1,] 0
(mat1[1,1] - scalar[1])/mat1[1,1]
# [1] -Inf
(mat2[1,1] - scalar[1])/mat2[1,1]
# [1] Inf
为什么两者都不给-Inf
?我没有看到matrix
的帮助文件。我也无法使用mat1
,mat2
或class
来区分str
和dput
。
答案 0 :(得分:1)
我只是总结一下有关评论的讨论,以便结束这个问题。
首先,这种行为不是特定于矩阵,观察
a<- 0; (a-1)/a
# [1] -Inf
a<- -log(1); (a-1)/a
# [1] Inf
而是它是IEEE浮点运算错综复杂的结果。尽管事实如此
-log(1) == 0
# [1] TRUE
零实际上可以举着牌子。有一个&#34; + 0&#34;和&#34; -0&#34;并且-log(1)
返回后者。将+0
添加到负零值应该使其成为&#34;常规&#34;零。
a<- -log(1)+0; (a-1)/a
# [1] -Inf