Grafiksel bir çizim yapmadan önce veri kümesini alt yapıyorum, ancak anahtar sayısal olarak match()
veya %in%
katı eşitlik testini kullanamıyorum (birkaç değeri özlüyor). Aşağıdaki alternatifi yazdım, ama bu sorunun bir yerde daha iyi bir yerleşik alternatif olduğu yeterince yaygın olduğunu düşünüyorum. all.equal
, birden çok test değeri için tasarlanmamış gibi gözükmemektedir.match() toleransla değerleri
`%~%` <- function(x,y) sapply(x, function(.x) {
any(sapply(y, function(.y) isTRUE(all.equal(.x, .y, tolerance=tol))))
})
x %~% c(1,2,3)
[1] TRUE TRUE FALSE TRUE FALSE TRUE
İki orada işlevleri uygulamak zorunda sevmiyorum: Bu all.equal
ama ne kadar iyi
select_in <- function(x, ref, tol=1e-10){
testone <- function(value) abs(x - value) < tol
as.logical(rowSums(sapply(ref, testone)))
}
x = c(1.0, 1+1e-13, 1.01, 2, 2+1e-9, 2-1e-11)
x %in% c(1,2,3)
#[1] TRUE FALSE FALSE TRUE FALSE FALSE
select_in(x, c(1, 2, 3))
#[1] TRUE TRUE FALSE TRUE FALSE TRUE
@Frank nope :) bir yanıt olarak gönderin – baptiste
@Frank harika bir fikir! –