Trouver ce dont vous avez besoin dans R: recherche ciblée dans R et tous les packages CRAN (plus de 3 500)

StackOverflow https://stackoverflow.com/questions/1812702

  •  06-07-2019
  •  | 
  •  

Question

Souvent, dans R, une douzaine de fonctions sont disséminées dans autant de packages. Toutes ont le même objectif mais diffèrent bien sûr en termes de précision, de performances, de documentation, de rigueur théorique, etc.

.

Comment les localisez-vous - à partir de R et même parmi les packages CRAN que vous n'avez pas installés?

Ainsi, par exemple: la fonction générique plot . Il est beaucoup plus facile de définir des ticks secondaires à l'aide d'une fonction située à l'extérieur du package de base:

minor.tick(nx=n, ny=n, tick.ratio=n)

Bien sûr, plot est dans le noyau R, mais minor.tick ne l’est pas, c’est en fait dans Hmisc .

Bien sûr, cela n'apparaît pas dans la documentation de plot , et vous ne devriez pas vous y attendre.

Autre exemple: les arguments d'entrée de données vers plot peuvent être fournis par un objet renvoyé par la fonction hexbin . Cette fonction provient également d'une bibliothèque située à l'extérieur du noyau R.

Ce qui serait formidable est évidemment un moyen programmatique de rassembler ces arguments de fonction dans les différentes bibliothèques et de les mettre dans un seul espace de nom?

* edit: (essayant de reformuler mon exemple juste plus haut :) les arguments de plot fournis dans R core, par exemple, la définition de la fréquence de tick d'axe est xaxp / yaxp; Cependant, vous pouvez également définir a / t / f via une fonction en dehors du package de base, comme dans la fonction minor.tick du package Hmisc - mais vous ne le sauriez pas uniquement en consultant la signature de la méthode de tracé. . Existe-t-il une fonction méta dans R pour cela? *

Jusqu'à présent, au fur et à mesure que je les rencontrais, je les rassemblais manuellement, chaque ensemble étant rassemblé dans un seul TextMate extrait (avec les importations de la bibliothèque correspondante). . Ce n'est pas si difficile ou fastidieux, mais je ne peux que mettre à jour mon extrait de code au fur et à mesure que je découvre ces arguments / paramètres supplémentaires. Existe-t-il un moyen canonique de faire cela, ou du moins un moyen plus simple?

Juste au cas où cela ne serait pas clair, je ne parle pas du cas où plusieurs packages fournissent des fonctions orientées vers la même statistique ou vue (par exemple, "boxplot" dans le package de base; "boxplot.matrix" dans gplots; et «bplots» dans Rlab). Ce dont je parle, c’est le cas dans lequel le nom de la fonction est identique dans deux packages ou plus.

Était-ce utile?

La solution

Le " sos " le paquet est une excellente ressource. Son interface principale est le " findFn ". commande, qui accepte une chaîne (votre terme de recherche) et analyse la "fonction". entrées dans la base de données de recherche de sites de Johnathan Baron et renvoie les entrées contenant le terme recherché dans un bloc de données (de la classe "findFn").

Les colonnes de ce bloc de données sont les suivantes: Nombre , MaxScore , TotalScore , Package , Fonction , Date , Score , Description et Lien . En cliquant sur " Lien " dans la ligne de n'importe quelle entrée affichera immédiatement la page d'aide.

Un exemple: supposons que vous vouliez trouver tous les filtres de convolution de tous les 1800 packages R ou plus.

library(sos)
cf = findFn("convolve") 

Cette requête recherche le terme "convolve", autrement dit, il ne doit pas s'agir du nom de la fonction.

Saisie au clavier " cf " renvoie un tableau HTML de toutes les correspondances trouvées (23 dans ce cas). Ce tableau est un rendu HTML du cadre de données que j'ai mentionné ci-dessus. Ce qui est particulièrement pratique, c’est que chaque colonne ("Nombre", "MaxScore", etc.) peut être triée en cliquant sur l’en-tête de la colonne. Vous pouvez ainsi afficher les résultats par "Score", par "Nom du package", etc.

(Autre remarque: lors de l'exécution de la requête exacte, l'un des résultats était la fonction "panel.tskernel" dans un package appelé "latticeExtra". Je ne savais pas que ce package contenait des filtres de séries chronologiques et Je doute que je l'aurais découvert autrement.

Autres conseils

Il n’est pas facile de répondre à votre question. Il n'y a pas une fonction définitive.

formals est la fonction qui donne les arguments nommés à une fonction et leurs valeurs par défaut dans une liste nommée, mais vous pouvez toujours avoir des arguments variables via . .. et arguments nommés cachés avec la fonction hadArg intégrée. Pour obtenir la liste de ceux-ci, vous devez utiliser getAnywhere, puis analyser l'expression pour le hasArg. Je ne peux pas penser à une façon automatique de le faire vous-même. C’est-à-dire si les arguments cachés des fonctions ne sont pas documentés.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top