Trovare ciò di cui hai bisogno in R: ricerca mirata all'interno di R e di tutti (oltre 3.500) pacchetti CRAN
-
06-07-2019 - |
Domanda
Spesso in R, ci sono una dozzina di funzioni sparse in altrettanti pacchetti - tutti con lo stesso scopo ma ovviamente differiscono per accuratezza, prestazioni, documentazione, rigore teorico e così via.
Come li trovi, all'interno di R e persino tra i pacchetti CRAN che non hai installato?
Ad esempio: la generica trama . L'impostazione di tick secondari è molto più semplice usando una funzione outside del pacchetto base:
minor.tick(nx=n, ny=n, tick.ratio=n)
Naturalmente trama è in R core, ma minor.tick non lo è, in realtà è in Hmisc .
Ovviamente, ciò non viene visualizzato nella documentazione per trama , né dovresti aspettartelo.
Un altro esempio: argomenti di input di dati per trama possono essere forniti da un oggetto restituito dalla funzione hexbin , ancora una volta, questa funzione proviene da una libreria esterna di R core.
Ciò che sarebbe bello ovviamente è un modo programmatico per raccogliere questi argomenti di funzione dalle varie librerie e metterli in un unico spazio dei nomi?
* modifica: (cercando di ri-dichiarare il mio esempio appena sopra più chiaramente :) gli argomenti per tracciare forniti in R core, ad esempio, l'impostazione della frequenza di tick dell'asse sono xaxp / yaxp; tuttavia, si può anche impostare a / t / f tramite una funzione al di fuori del pacchetto base, di nuovo, come nella funzione minor.tick dal pacchetto Hmisc - ma non si può sapere che solo guardando la firma del metodo di trama . Esiste una meta funzione in R per questo? *
Finora, quando li ho incontrati, li ho raccolti manualmente, ogni set è stato raccolto in un singolo TextMate snippet (insieme alle importazioni delle librerie degli assistenti) . Non è difficile o richiede tempo, ma posso aggiornare il mio frammento solo quando scopro questi argomenti / parametri aggiuntivi. Esiste un modo canonico R per farlo, o almeno un modo più semplice?
Nel caso non fosse chiaro, non sto parlando del caso in cui più pacchetti forniscono funzioni dirette alla stessa statistica o vista (ad esempio, 'boxplot' nel pacchetto base; 'boxplot.matrix' in gplots; e 'bplots' in Rlab). Quello di cui sto parlando è il caso in cui il nome della funzione è lo stesso in due o più pacchetti.
Soluzione
Il " sos " il pacchetto è una risorsa eccellente. La sua interfaccia principale è " findFn " comando, che accetta una stringa (il termine di ricerca) e scansiona la funzione " " voci nel database di ricerca del sito di Johnathan Baron e restituisce le voci che contengono il termine di ricerca in un frame di dati (di classe "trovaFn").
Le colonne di questo frame di dati sono: Conteggio , MaxScore , TotalScore , Pacchetto , Funzione , Data , Punteggio , Descrizione e Link . Facendo clic su " Link " nella riga di qualsiasi voce verrà immediatamente visualizzata la pagina di aiuto.
Un esempio: supponiamo di voler trovare tutti i filtri di convoluzione in tutti i pacchetti 1800+ R.
library(sos)
cf = findFn("convolve")
Questa query apparirà con il termine "contorto", in altre parole, che non deve essere il nome della funzione.
Digitando " cf " restituisce una tabella HTML di tutte le corrispondenze trovate (23 in questo caso). Questa tabella è un rendering HTML del frame di dati che ho citato sopra. Ciò che è particolarmente conveniente è che ogni colonna (" Count " ;, " MaxScore " ;, ecc.) È ordinabile facendo clic sull'intestazione della colonna, in modo da poter visualizzare i risultati con " Punteggio " ;, con " Nome pacchetto " ;, ecc.
(A parte: quando si esegue quella query esatta, uno dei risultati era la funzione "panel.tskernel" in un pacchetto chiamato "quoticeExtra". Non sapevo che questo pacchetto avesse filtri di serie temporali e dubito che l'avrei scoperto altrimenti.
Altri suggerimenti
Non è facile rispondere alla tua domanda. Non esiste una funzione definitiva.
formals
è la funzione che fornisce gli argomenti nominati a una funzione e i loro valori predefiniti in un elenco denominato, ma è sempre possibile avere argomenti variabili tramite . ..
e argomenti nascosti con nome con funzione hadArg
incorporata. Per ottenere un elenco di quelli dovresti usare un getAnywhere e quindi scansionare l'espressione per l'hashArg. Non riesco a pensare a un modo automatico di farlo da solo. Cioè se le funzioni argomenti nascosti non sono documentate.