说,我的向量y和我想检查如果y各自元素是整数或没有,并且如果不是,停止与错误消息。 我试图is.integer(Y),但它不工作。
Answer 1:
(!和最快)的最简单的事情大概是这样的:
stopifnot( all(y == floor(y)) )
...所以想出来:
y <- c(3,4,9)
stopifnot( all(y == floor(y)) ) # OK
y <- c(3,4.01,9)
stopifnot( all(y == floor(y)) ) # ERROR!
如果你想有一个更好的错误信息:
y <- c(3, 9, NaN)
if (!isTRUE(all(y == floor(y)))) stop("'y' must only contain integer values")
Answer 2:
你可以这样做:
y <- c(3,3.1,1,2.3)
(y - floor(y)) == 0
[1] TRUE FALSE TRUE FALSE
要么
(y - round(y)) == 0
如果你想要一个TRUE
或FALSE
整个事情,把它all()
例如:
all((y - round(y)) == 0)
[1] FALSE
Answer 3:
这里的另一种方式(使用相同的伎俩比较每个号码裹挟进“整数”类型的号码的贾斯汀):
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
为了让你的测试:
R> all(sapply(v2, function(i) i == as.integer(i)))
[1] FALSE
Answer 4:
不知道这是更快添的方式或这一点,但是:
> x <- 1:5
> y <- c(x, 2.0)
> z <- c(y, 4.5)
> all.equal(x, as.integer(x))
[1] TRUE
> all.equal(y, as.integer(y))
[1] TRUE
> all.equal(z, as.integer(z))
[1] "Mean relative difference: 0.1111111"
>
要么:
all((z - as.integer(z))==0)
Answer 5:
我在一个完全不同的方向,然后添去(我喜欢他的更好,虽然我的方法适用于混合向量与整数等字符向量):
int.check <- function(vect) {
vect <- as.character(vect)
sapply(vect, function(x) all(unlist(strsplit(x, ""))%in% 0:9))
}
x <- c(2.0, 1111,"x", 2.4)
int.check(x)
编辑:改变了功能,因为它只能在特征向量的工作。
这部作品的阶级性质的载体以及如果你有与已经裹挟字符各种混合数量,但一个特征向量。
Answer 6:
检查下列各项以明快的if条件,我们可以在脚本的使用帮助。
sff <- 5
if(!(is.integer(sff) == is.character(sff))){
sff
} else {
"hello"
}
给
hello
sff <- 'a'
给出'a'
作为结果。
Answer 7:
如果您有浮点表示错误,请尝试:
round( y, TOLERANCE.DIGITS ) %% 1 == 0
在我的应用程序,我不得不认真残酷的浮点表示错误,使得:
> dictionary$beta[3]
[1] 89
> floor(dictionary$beta[3])
[1] 88
> as.integer( dictionary$beta )[3]
[1] 88
> dictionary$beta[3] %% 1
[1] 1
在除以1其余的是一个。 我发现,我不得不回之前,我把整。 我认为所有这些测试会在你想要的上述89算作一个整数的情况下失败。 该“all.equal”功能,就是要处理浮点表示错误的最好方式,但是:
all.equal( 88, 89 );
在我的情况下,会给出一个整数值检查假阴性有(也没有)。
编辑:在基准测试中,我发现:
(x == as.integer(x))
是普遍表现最佳 。
(x == floor(x))
((x - as.integer(x)) == 0)
通常效果很好,经常一样快。
(x %% 1 <= tolerance)
工作,但速度赶不上别人
!(is.character(all.equal(x, as.integer(x))))
当载体是不是整数,有糟糕的表现(当然,因为它关系到估计差的麻烦)。
identical(x, as.integer(x))
当载体是所有整数值,返回不正确的结果(假设的问题,是为了检查整数值,而不是整数类型)。
文章来源: How to check if each element in a vector is integer or not in R?