Il problema è il riciclo vettoriale.
La prima linea fa esattamente quello che ti aspetteresti. Controlla quali elementi di df$time
sono in c(0.5, 3)
e restituisce i valori che sono.
La seconda linea è più complicata. In realtà è equivalente a
df[df$time == rep(c(0.5,3), length.out=nrow(df)),]
Per vedere questo, vediamo cosa succede se utilizzare un vettore rep(0.5, 10)
:
rep(0.5, 10) == c(0.5, 3)
[1] TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE TRUE FALSE
vedere come si torna ogni valore dispari. Essenzialmente corrisponde allo 0,5 sul vettore c(0.5, 3, 0.5, 3, 0.5...)
È possibile manipolare un vettore per non produrre corrispondenze in questo modo. Prendere il vettore: rep(c(3, 0.5), 5)
:
rep(c(3, 0.5), 5) == c(0.5, 3)
[1] FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE FALSE
Sono tutti FALSE. Stai abbinando ogni 0,5 con 3 e viceversa.
fonte
2013-03-12 10:01:52
Vedere '? '=='' e '? '% In%'' in R –
potresti essere interessato a [numero video 033] (http://www.twotorials.com/) –