>= 不工作,R

>= not working, R

我是运行下面的代码。函数 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)

>=没有错,你的问题是1不是真的1。 试试这个

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

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

编辑:可能的解决方案

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

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