【问题标题】:>= not working, R [duplicate]>= 不工作,R [重复]
【发布时间】:2015-06-15 01:28:33
【问题描述】:

我正在运行下面的代码。函数 Ax 返回值 1。但 ifelse 语句无法识别 Ax==1。

我尝试过使函数的输出为双精度,并且所有数值都加倍。这没有奏效。

我希望:
1) 获得帮助解决此特定案例
2) 获取有关如何在未来避免此问题的提示

Axfun<-function(beta,gamma,a,b,g,H0stud,Wh,Wi){ 
  ((b*beta + g*gamma)*(1 + 2*g*gamma)*(1 + gamma + b*((-beta)*(1 + gamma) + a*(-1 + beta)*(1 + g*gamma)))*H0stud*Wi)/
    ((-1 + b*beta)*(1 + gamma)*((-g)*gamma*(1 + 2*g*gamma)*Wi + b*beta*((-1 + g*gamma*(-2 + H0stud) + H0stud)*Wh - (1 + g*gamma)*H0stud*Wi)))
}

Ax<-Axfun(2^1,
          2^0,
          2^0,
          2^-3,
          2^-1,
          1,
          1,
          0.4)

ifelse(Ax>=1, 0, Ax)

【问题讨论】:

  • 查看?all.equal,例如all.equal(Ax, 1),允许tolerance 内部存在差异。
  • 另请参阅这些 SO 帖子:123
  • 也是The R Inferno的第1圈

标签: r if-statement double logic


【解决方案1】:

&gt;= 没有问题,你的问题是 1 不是真的 1。 试试这个

Ax >= 1
[1] FALSE
Ax == 1
[1] FALSE

format(Ax, digits = 20)
[1] "0.99999999999999977796"

编辑:一个可能的解决方案

作为问题的解决方案,您可以将函数的最终结果返回给一个对象,然后将其用作ceiling 函数。

如果您必须处理这样的结果,也许阅读 R Inferno 的 Circle 1 是一件好事。你可以找到它here

【讨论】:

    猜你喜欢
    • 2011-11-11
    • 2017-07-25
    • 2015-04-21
    • 2017-12-12
    • 2012-11-15
    • 2018-03-29
    • 2015-01-20
    • 2014-09-14
    • 1970-01-01
    相关资源
    最近更新 更多