2016-03-12 64 views
3

基本上,我希望檢查一個數的平方根是一個整數工作,所以我嘗試以下功能:R:is.integer不會對平方根

is.integer(sqrt(4)) 

期望值是TRUE,而實際結果是FALSE。我讀過一些其他帖子,似乎我需要使用L強制爲一個整數。然而,不知道我應該如何讓它在我的情況下工作。

回答

7

是的。甚至:

is.integer(1) 
## [1] FALSE 

因爲類型(相對值)不整數。看看幫助?is.integer。函數is.wholenumber顯示有:

is.wholenumber <- 
    function(x, tol = .Machine$double.eps^0.5) 
     abs(x - round(x)) < tol 
is.wholenumber(sqrt(4)) 
## [1] TRUE 
+1

好奇,爲什麼你使用√.Machine$ double.eps而不是直接使用小量的價值。 – psaxton

+0

看起來像是一個有點啓發性的選擇(通過將tol作爲一個可選參數來證明;如果他們非常確定tol的值,那麼它就不會成爲參數) –

+0

我看到它只是一個默認值並且完全可以稱之爲如果你在方法體中取得了tol的根,那就錯了。機器默認的epsilon一般應小於1,並且採用root會使其更大,導致默認方法不如配置準確。此外,如果我設置默認值,我可能會給出與將參數值傳遞爲相同值的結果不同的結果。我意識到這不是代碼審查,但有時我不能幫助自己。 – psaxton