检查数字是否是整数

我很惊讶得知R没有提供一个方便的函数来检查数字是否是整数。

is.integer(66) # FALSE 

帮助文件警告 :

is.integer(x)不testingx包含整数! 为此,请使用round ,如例子中的函数is.wholenumber(x)所示。

该示例将此自定义函数作为“解决方法”

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

如果我不得不写一个函数来检查整数,假设我没有阅读上面的评论,我会写一个函数,

 check.integer <- function(x) { x == round(x) } 

我的方法会在哪里失败? 如果你在我的假设鞋子里,你的工作会是什么?

另一种方法是检查小数部分:

 x%%1==0, 

要么,

 min(abs(c(x%%1, x%%1-1))) < tol, 

如果你想检查一定的宽容。

这里有一个解决scheme,使用更简单的function,没有黑客:

 all.equal(a, as.integer(a)) 

而且,如果你愿意的话,你可以一次testing一个完整的vector。 这是一个function:

 testInteger <- function(x){ test <- all.equal(x, as.integer(x), check.attributes = FALSE) if(test == TRUE){ return(TRUE) } else { return(FALSE) } } 

你可以改变它来使用*apply于vector,matrix等

这是一个明显可靠的方法:

 check.integer <- function(N){ !grepl("[^[:digit:]]", format(N, digits = 20, scientific = FALSE)) } check.integer(3243) #TRUE check.integer(3243.34) #FALSE check.integer("sdfds") #FALSE 

该解决scheme还允许以科学记数法的整数:

 > check.integer(222e3) [1] TRUE 

看来,你没有看到需要纳入一些容错。 如果所有整数都以整数formsinput,则不需要,但是有时它们是由于算术运算的结果而失去一些精确性。 例如:

 > 2/49*49 [1] 2 > check.integer(2/49*49) [1] FALSE > is.wholenumber(2/49*49) [1] TRUE 

请注意,这不是R的弱点,所有的计算机软件都有一定的精度限制。

阅读R语言文档, as.integer与存储数字的方式有关,如果它实际上相当于一个整数。 is.integertesting数字是否被声明为整数。 你可以通过在它后面加一个L来声明一个整数。

 > is.integer(66L) [1] TRUE > is.integer(66) [1] FALSE 

round这样的函数将返回一个声明的整数,这就是你正在做的x==round(x) 。 这种方法的问题是你认为实际上是一个整数。 该示例使用较低的精度来testing等价性。

 > is.wholenumber(1+2^-50) [1] TRUE > check.integer(1+2^-50) [1] FALSE 

所以根据你的应用程序,你可能会遇到麻烦。

来自Hmisc::spss.get

 all(floor(x) == x, na.rm = TRUE) 

更安全的select,恕我直言,因为它“绕过”机器精度问题。 如果你尝试is.integer(floor(1)) ,你会得到FALSE 。 顺便说一句,你的整数不会被保存为整数,如果它大于.Machine$integer.max值,这是默认2147483647,所以要么改变integer.max值,或做替代检查…

在R中,一个数字是数字还是整数都可以通过类函数来确定。 一般来说,所有的数字都以数字的forms存储,并且明确地定义一个数字作为整数,我们需要在数字之后指定“L”。

例:

x < – 1

类(x)的

[1]“数字”

x < – 1L

类(x)的

[1]“整数”

我希望这是需要的。 谢谢 :)

你可以使用简单的条件,如:

 if(round(var) != var) 

我不知道你在做什么。 但是这里有一些想法:
1.转换为整数:
num = as.integer(123.2342)
2.检查一个variables是否是一个整数:
is.integer(num)
typeof(num)=="integer"