出於某種原因,我的函數「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)}}