Bedenken Sie:Ungefähre Übereinstimmung (analog aller gleich für identisch)?
(tmp1 <- seq(0, 0.2, 0.01)[16])
# [1] 0.15
(tmp2 <- seq(0, 0.2, 0.05)[4])
# [1] 0.15
und
identical(tmp1, tmp2)
# [1] FALSE
all.equal(tmp1, tmp2) # test for 'near' equality
[1] TRUE
Der eigentliche Grund ist mit floating point precision zu tun. Dies führt jedoch zu einem Problem, wenn sie versuchen, Teilfolgen innerhalb Sequenzen zu identifizieren match
verwenden, zum Beispiel:
match(seq(0, 0.2, 0.05), seq(0, 0.2, 0.01))
# [1] 1 6 11 NA 21
Gibt es eine Alternative zu match
, die das Analogon von all.equal
für identical
ist?
Vielleicht mit 'round'? 'match (round (tmp2, 2), round (tmp1, 2))' –
Das ist eine gute Idee, also muss ich nur geschickt das Ziffernargument wählen. – Alex
@Alex - 'round' funktioniert definitiv auf Vektoren. Es wäre sonst ziemlich nutzlos. – thelatemail