2013-03-25 22 views
7

Immagino che questo esista già da qualche parte in R, quindi forse potresti indirizzarmi ad esso.Funzione R per fare tutti i confronti a coppie per due vettori

Ho due vettori numerici, A e B.

A <- c(1,2,3) 
B <- c(2,3,4) 

Sto cercando una funzione che fa qualcosa di simile a fare ogni possibile confronto tra A e B, e restituendo un vettore di T/F di quei confronti.

Quindi, in questo caso, sarebbe confrontare: 1> 2 poi 1> 3 poi 1> 4 e poi 2,2 poi 2> 3 allora 2> 4 e poi 3> 2 poi 3> 4 e ritorno:

FALSE FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE 

Sarebbe bene se restituisse le differenze, in quanto potrebbe essere facilmente convertito.

Esiste già una funzione come questa?

+1

Strettamente parlando, questo è fuori tema per CV, ma in tema per stackoverflow. Se lo contrassegni, un moderatore lo sposta lì per te. –

risposta

10

outer è probabilmente la funzione desiderata. Tuttavia, restituisce una matrice, quindi dobbiamo ottenere un vettore. Ecco un modo di molti:

a <- 1:3 
b <- 2:4 
as.vector(outer(a,b,">")) 
[1] FALSE FALSE TRUE FALSE FALSE FALSE FALSE FALSE FALSE 

(che non è l'ordine specificato anche se, è, comunque, un ordine consistente)

anche:

as.vector(t(outer(a,b,">"))) 
[1] FALSE FALSE FALSE FALSE FALSE FALSE TRUE FALSE FALSE 

Ora, per le differenze:

> as.vector(outer(a,b,"-")) 
[1] -1 0 1 -2 -1 0 -3 -2 -1 

Trovo che outer sia molto utile. Lo uso regolarmente.

+0

Ha funzionato alla grande. Grazie. – evt

+0

Ho leggermente modificato e aggiunto alcune informazioni extra. –

+0

Invece di usare 'c' per il suo effetto collaterale, avrai un codice più leggibile se usi' as.vector'. – A5C1D2H2I1M1N2O1R2T1

Problemi correlati