如何在R中检查向量中的每个元素是否为整数?

zca*_*ca0 10 integer r vector

说,我有一个向量y,我想检查y中的每个元素是否为整数,如果不是,则停止并显示错误消息.我试过is.integer(y),但它不起作用.

Tom*_*mmy 16

最简单(也是最快!)的事情可能是这样的:

stopifnot( all(y == floor(y)) )
Run Code Online (Sandbox Code Playgroud)

......所以试一试:

y <- c(3,4,9)
stopifnot( all(y == floor(y)) ) # OK

y <- c(3,4.01,9)
stopifnot( all(y == floor(y)) ) # ERROR!
Run Code Online (Sandbox Code Playgroud)

如果您想要更好的错误消息:

y <- c(3, 9, NaN)
if (!isTRUE(all(y == floor(y)))) stop("'y' must only contain integer values")
Run Code Online (Sandbox Code Playgroud)


tim*_*ffe 9

你可以这样做:

   y <- c(3,3.1,1,2.3)
   (y - floor(y)) == 0
    [1]  TRUE FALSE  TRUE FALSE
Run Code Online (Sandbox Code Playgroud)

要么

   (y - round(y)) == 0
Run Code Online (Sandbox Code Playgroud)

如果您想要单个TRUEFALSE整个事物,请将其放入all(),例如:

   all((y - round(y)) == 0)
    [1] FALSE
Run Code Online (Sandbox Code Playgroud)


Mic*_*unn 6

这是另一种方式(使用与Justin相同的技巧将每个数字与强制转换为'整数'类型的数字进行比较):

R> v1 = c(1,2,3)
R> v2 = c(1,2,3.5)
R> sapply(v1, function(i) i == as.integer(i))
[1] TRUE TRUE TRUE
R> sapply(v2, function(i) i == as.integer(i))
[1]  TRUE  TRUE FALSE
Run Code Online (Sandbox Code Playgroud)

要进行测试:

R> all(sapply(v2, function(i) i == as.integer(i)))
[1] FALSE
Run Code Online (Sandbox Code Playgroud)