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什么好处?
你的方法并不完全可靠。
> 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)
如果应该返回整数的操作经历了一个稍微偏离的过程,那么您的方法将说不是整数。也许这就是你想要的。但大多数人都在寻找“假设这是一个整数是否合理”