Corrispondenza parziale dell’argomento funzione

So che per un elenco, l’abbinamento parziale viene eseguito durante l’indicizzazione utilizzando gli operatori di base $ e [[ . Per esempio:

 ll <- list(yy=1) ll$y [1] 1 

Ma sono ancora un principiante R e questo è nuovo per me, la corrispondenza parziale degli argomenti di funzione:

 h <- function(xx=2)xx h(x=2) [1] 2 

Voglio capire come funziona. Qual è il meccanismo dietro di esso? Questo ha qualche effetto collaterale? Voglio capire come può qualcuno testare se l’argomento xx è stato dato?

Modifica dopo il commento di Andrie:

Internamente R usa pmatch algoritmo di pmatch per far corrispondere l’argomento, ecco un esempio di come funziona:

  pmatch("me", c("mean", "median", "mode")) # error multiple partial matches [1] NA > pmatch("mo", c("mean", "median", "mode")) # mo match mode match here [1] 3 

Ma perché R ha questa caratteristica? Qual è l’idea alla base dell’abbinamento partial unique ?

Esiste una corrispondenza parziale per risparmiare la digitazione di nomi di argomenti lunghi. Il pericolo con esso è che le funzioni possono ottenere ulteriori argomenti in seguito a quale conflitto con la corrispondenza parziale. Ciò significa che è adatto solo per l’uso interattivo – se si sta scrivendo un codice che resterà fermo per un lungo periodo (ad esempio, in un pacchetto), si dovrebbe sempre scrivere il nome completo dell’argomento. L’altro problema è che abbreviando il nome di un argomento, puoi rendere il tuo codice meno leggibile.

Due usi comuni sono:

  1. len invece di length.out con la funzione seq (o seq.int ).

  2. all invece di all all.names con la funzione ls .

Confrontare:

 seq.int(0, 1, len = 11) seq.int(0, 1, length.out = 11) ls(all = TRUE) ls(all.names = TRUE) 

In entrambi i casi, il codice è altrettanto facile da leggere con i nomi degli argomenti abbreviati, e le funzioni sono vecchie e sufficientemente stabili da rendere improbabile l’aggiunta di un altro argomento con un nome in conflitto.

Una soluzione migliore per risparmiare sulla digitazione è, piuttosto che usare nomi abbreviati, per utilizzare il completamento automatico dei nomi di variabili e argomenti. R GUI e RStudio supportano questo utilizzando il tasto TAB e Architect lo supporta utilizzando CTRL + Spazio .