Преобразование as.character
.
as.character(x) %in% as.character(seq(0.15, 0.3, 0.01))
# [1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
# [10] FALSE TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
# [19] TRUE TRUE TRUE TRUE TRUE TRUE TRUE TRUE
Похоже, это также работает для более сложных случаев. Обратите внимание:
x <- c(.2999, .3, .2499, .25)
y <- c(.299, .3, .249, .25)
as.character(x) %in% as.character(y)
# [1] FALSE TRUE FALSE TRUE
При округлении нам нужно правильно вычислить цифры для обобщения,
round(x, 3) %in% round(y, 3)
# [1] TRUE TRUE TRUE TRUE
round(x, 4) %in% round(y, 4)
# [1] FALSE TRUE FALSE TRUE
, которые можно автоматизировать:
d <- max(nchar(c(x, y))) - 2
round(x, d) %in% round(y, d)
# [1] FALSE TRUE FALSE TRUE
Мы можем обернуть оба решения в функцию:
`%in2%` <- function(x, y) {
d <- max(nchar(c(x, y))) - 2
round(x, d) %in% round(y, d)
}
`%in3%` <- function(x, y) {
as.character(x) %in% as.character(y)
}
x %in2% y
# [1] FALSE TRUE FALSE TRUE
x %in3% y
# [1] FALSE TRUE FALSE TRUE