出于某种原因,我的函数“isint”将不适用于一些分数。下面是代码:功能,告诉如果是一个整数将不起作用
isint<-function(x){if(x!=round(x)){return(0)}else{return(1)}}
isint(1.05/1.05)给了我1个然而isint(1040.55/1.05)给了我0.1
为什么会出现这种情况?
出于某种原因,我的函数“isint”将不适用于一些分数。下面是代码:功能,告诉如果是一个整数将不起作用
isint<-function(x){if(x!=round(x)){return(0)}else{return(1)}}
isint(1.05/1.05)给了我1个然而isint(1040.55/1.05)给了我0.1
为什么会出现这种情况?
这只是因为算术基础-2是不准确的基础-10。更好的测试是使用!all.equal(x,round(x))
,它允许有小的差异。例如,比较以下...
> all.equal(1040.55/1.05,991)
[1] TRUE
> identical(1040.55/1.05,991)
[1] FALSE
所以,尽量isint<-function(x){if(!all.equal(x,round(x))){return(0)}else{return(1)}}