【问题标题】:Error with which() in R [duplicate]R中的which()出错[重复]
【发布时间】:2013-03-07 20:23:31
【问题描述】:
minls<- -5.74
maxls<- 1.97
sseq<-seq(minls,maxls,0.5)
which(sseq==-0.24)

which(sseq==-0.24) 给出输出数字(0)

测试 sseq

 [1] -5.74 -5.24 -4.74 -4.24 -3.74 -3.24 -2.74 -2.24 -1.74 -1.24 -0.74 -0.24  0.26  0.76  1.26  1.76

如你所见,第 12 个元素是 -0.24

通过 c(...) 简单地创建一个数组不会出现这个错误

我在做什么不正确或者这是 which() 函数的问题,是否有任何替代 which()

【问题讨论】:

    标签: r


    【解决方案1】:

    您正面临数值近似问题。

    试试sseq == -0.24sseq+0.24

    您会注意到sseq 中的所有值都不完全是-0.24。所以这个问题与which 无关,只是因为计算机不能准确地表示所有数字。

    【讨论】:

      【解决方案2】:

      这可能是由于浮点问题。您可以使用all.equal 来检查阈值(此函数的tolerance 参数)。

      # tolerance is default - .Machine$double.eps ^ 0.5
      chk <- apply(as.matrix(sseq), 1, function(x) {
          ifelse(all.equal(x, -0.24) == "TRUE", TRUE, FALSE)
      })
      which(chk)
      # [1] 12
      

      【讨论】:

        【解决方案3】:

        类似于@Arun的回答,你也可以这样做

        # Change 1e-9 to whatever tolerance suits you best
        which(abs(sseq-(-0.24)) < 1e-9)
        

        【讨论】:

        • aha.. 聪明.. 我做了abs(seq)+0.24 并很快意识到它也会给出接近 0.24 的正值。我不得不更改为all.equal。 (+1)。
        猜你喜欢
        • 2016-08-20
        • 2019-02-06
        • 2018-01-23
        • 2016-08-31
        • 1970-01-01
        • 2022-08-10
        • 2016-09-07
        • 2012-08-25
        相关资源
        最近更新 更多