为什么不使用 as.integer 来检查数字是否为整数?

J. *_*ini 1 integer r

is.integer众所周知,R不检查输入是否为整数。相反,它检查整数类型。它的文档表明,如果我们想检查某个东西是否是整数,我们应该使用:

is.wholenumber <- function(x, tol = .Machine$double.eps^0.5)  abs(x - round(x)) < tol
Run Code Online (Sandbox Code Playgroud)

但不会

is.int<-function(numb) is.numeric(numb)&&as.integer(numb)==numb
Run Code Online (Sandbox Code Playgroud)

是一种更简洁的方法并且需要更少的参数?is.wholenumberover有is.int什么好处?

Das*_*son 6

你的方法并不完全可靠。

> sqrt(999)^2
[1] 999
> is.wholenumber(sqrt(999)^2)
[1] TRUE
> is.int(sqrt(999)^2)
[1] FALSE
> options(digits =22)
> sqrt(999)^2
[1] 998.99999999999989
Run Code Online (Sandbox Code Playgroud)

如果应该返回整数的操作经历了一个稍微偏离的过程,那么您的方法将说不是整数。也许这就是你想要的。但大多数人都在寻找“假设这是一个整数是否合理”