Sono nuovo di R e sto cercando di ottenere un controllo sulla famiglia di funzioni apply. Nello specifico, sto cercando di scrivere una funzione di ordine superiore che accetti 2 vettori di caratteri, "host" e "guest" (che non devono necessariamente avere la stessa lunghezza) e restituiscono un vettore di indice della stessa lunghezza di "host" ", con gli elementi risultanti corrispondenti ai loro indici in guest (NA se non lì).Come posso vettorializzare questa funzione per restituire un vettore indice?
host <- c("A","B","C","D")
guest <- c("D","C","A","F")
matchIndices <- function(x,y)
{
return(match(x,y))
}
Questo codice restituisce 3 come previsto: (? Sapply)
matchIndices(host[1],guest)
Questo è il ciclo mi piacerebbe essere in grado di sostituire con una funzione di applicare succinta
Questo codice "funziona" nel senso che produce l'output sotto, ma voglio davvero che il risultato sia un vettore, e ho la sensazione che una delle funzioni applicative farà il trucco. Sono solo bloccato su come scriverlo. Qualsiasi aiuto sarebbe più apprezzato. Grazie.
3; A; NA; B; 2; C; 1; D;
si può solo fare 'sapply (host, partita, ospite) ', non c'è bisogno di definire' matchIndices' –
@Prasad Sì, si potrebbe, ma ho lasciato questo come fosse per mostrare come a fiacco una funzione utente in questo modo. Il motivo per cui l'ho lasciato è che tutto questo può essere fatto con 'match' direttamente mentre accetta un vettore first argument. Vedi la mia risposta aggiornata. –
Questo è favoloso. Grazie mille. "match (host, guest)" è perfetto. Non avevo capito che poteva essere così compatto. – user297400