>= 不工作,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.
我是运行下面的代码。函数 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.