2017-10-12 27 views
0

J'essaye d'écrire une fonction R qui va extraire les fonctions exportées d'un paquet R et retourner une liste contenant pour chaque fonction, la signature d'appel, et la description de la documentation.Extraire la documentation d'un paquetage r

Obtenir la liste des fonctions exportées peut être fait avec une relative facilité en procédant comme suit:

# Extracts all exported function names from dplyr 
library(dplyr) 
lsf.str("package:dplyr") 

Je peux aussi obtenir la signature d'appel pour une fonction donnée en utilisant le nom:

# Extract call signature for the join function in dplyr 
lsf.str("package:dplyr")[10] %>% 
    get() %>% 
    deparse() %>% 
    head(1) 

Je peux même ouvrir automatiquement la section d'aide pour chacune de ces fonctions:

# Opens help for the join function in dplyr 
help(lsf.str("package:dplyr")[10], package = "dplyr") 

Mais comment puis-je retourner une chaîne contenant le texte de la description de cette fonction? Donc, pour la fonction de jointure dans dplyr, il doit retourner:

Ce sont des fonctions génériques qui sont envoyées à des méthodes tbl individuelles - voir la documentation de la méthode pour plus de détails sur les sources de données individuelles. x et y doivent généralement provenir de la même source de données, mais si la copie est TRUE, y sera automatiquement copié sur la même source que x.

Des idées?

Répondre

3
library(tidyverse) 

lsf.str("package:dplyr")[10] %>% 
    help("dplyr") %>% 
    utils:::.getHelpFile() %>% 
    keep(~attr(.x, "Rd_tag") == "\\description") %>% 
    map(as.character) %>% 
    flatten_chr() %>% 
    paste0(., collapse="") 
## [1] "\nThese are generic functions that dispatch to individual tbl methods - see the\nmethod documentation for details of individual data sources. x and\ny should usually be from the same data source, but if copy is\nTRUE, y will automatically be copied to the same source as x.\n" 

Suppression des sauts de ligne est un exercice laissé à l'OP :-)

+0

Cela fonctionne très bien la plupart du temps, mais les résultats parfois dans le code de formatage mélangé, par exemple, tirant l'utilisation des résultats moyens en.: "\ nmean (x, liste()) \ n \ nlist (liste (\" mean \ "), liste (\" default \ ")) (x, trim = 0, na.rm = FALSE, list()) \ n " Existe-t-il un moyen de supprimer ces appels de liste? – jrdnmdhl

+0

Oui. C'est ce qu'on appelle "travailler". Vous avez un aperçu d'une solution générique qui fonctionne dans la plupart des cas. Le code existant contient de nombreuses astuces pour trouver d'autres réponses. La perfection appartient au chercheur ou aux autres qui veulent faire votre travail pour vous. – hrbrmstr

+0

S'il vous plaît ne pas prendre mon suivi comme moi ne travaille pas, car ce serait une hypothèse entièrement fausse. Je travaille sur ceci et beaucoup d'autres choses. Si vous ou quelqu'un d'autre a une réponse à mon suivi et le soin de l'offrir, je l'apprécierai grandement. J'apprécie en outre la réponse que vous avez déjà donnée, ce qui est très utile. – jrdnmdhl