Comment ne pas exécuter un exemple en utilisant roxygen2?

93

J'écris actuellement une fonction de géocodage qui repose sur une clé Bing Maps. Évidemment, je préfère ne pas publier le mien, et les exemples échouent sans un.

Comment puis-je inclure un exemple à exécuter manuellement par les utilisateurs, mais sans l'exécuter pendant R CMD check?

Ari B. Friedman
la source

Réponses:

147

Utilisation \dontrun{}

#'@examples
#'\dontrun{
#'geocode("3817 Spruce St, Philadelphia, PA 19104")
#'geocode("Philadelphia, PA")
#'dat <- data.frame(value=runif(3),address=c("3817 Spruce St, Philadelphia, PA 19104","Philadelphia, PA","Neverneverland"))
#'geocode(dat)
#'}
GSee
la source
2
ceci est documenté dans ?exampleet Writing R Extensions
GSee
2
@Jeroen, je crois que cela roxygen2a constitué le @exampletag, donc je pense que c'est un roxygen2problème. Je ne pense pas que ce \example{}soit valide - voir cran.r-project.org/doc/manuals
...
2
À en juger par le titre du sujet, la question concerne la syntaxe roxygen2 et non la syntaxe .Rd?
Jeroen
Merci d'avoir répondu. Cela n'a pas fonctionné pour moi d'abord parce que j'utilisais @exampleau lieu de @examples. Les deux balises apparaissent dans la saisie semi-automatique de RStudio. Je suis heureux maintenant.
Paul Rougieux
5
Je pense que la bonne réponse pour ce qui est demandé est ne testez pas et ne exécutez pas. Voir? Example et stackoverflow.com/questions/12038160/… . Voir aussi cran.r-project.org/web/packages/roxygen2/vignettes/rd.html .
Julian Karls
33

Vous pouvez utiliser \donttest{} votre exemple. L'extrait sera fourni dans votre documentation, mais ne sera pas testé avec le R CMD Check.

Pour plus d'informations -> ?example

#' @example
\donttest{
    2^2
    }

Ce 2 ^ 2 ne sera pas exécuté lorsque vous courrez devtools::check()

Vérifiez-le vous-même avant de juger. :)

samkart
la source
13
Il semble que cela devrait être la réponse acceptée au lieu de ne pas exécuter. De? Exemple 'donttest renferme du code qui doit généralement être exécuté, mais pas pendant la vérification du package.' alors que 'dontrun contient du code qui ne doit pas être exécuté.' J'ai également reçu un commentaire de la part des responsables de cran pour passer de dontrun à donttest.
Julian Karls
3
Tout à fait d'accord avec @JulianKarls. J'ai eu les mêmes retours de la part des responsables du CRAN.
David
9

Pour ceux qui utilisent à la @example path/to/example.Rplace de la @examplesbalise, vous pouvez utiliser l' \dontrunenvironnement directement dans le example.Rfichier. Par exemple

# example.R
\dontrun{
# this is a long running example
for(i in seq(1, 1e5)) { lm(mpg ~ wt, data = mtcars) }
}

# some other shorter example
2 + 2
Peter
la source
1
cela ne fonctionne pas pour moi (fonctionnant sous Win 10, 64 bits, R version 3.5.0)
JBJ
2

Ari, j'utilise aussi roxygen2 (version 4.1.0). Ce qui suit est la fin de mon balisage roxygen2 dans ma définition de fonction (gctemplate) jusqu'au début de la partie réelle.

#' @examples
#' ## List all G-causalities in a VAR system of 5 variables that will be searched in the pattern of 1 
#' ## causer (like-independent) variable and 2 like-dependents conditional on 5-(1+2)=2 of the remaining 
#' ## variable(s) in the system. Variables are assigned to numbers 1 to nvars. 
#' ## "1 2 5 3 4" in the resulting line of gctemplate is to indicate the 
#' ## (conditonal, partial, etc.) G-causality from variable 1 to variables 2 and 5 
#' ## conditonal on variables 3 and 4.
#' # gctemplate(5,1,2)
#' ## The number of all G-causalities to be searched in the above pattern.
#' #dim(gctemplate(5,1,2))[[1]]
#' @importFrom combinat combn
#' @export
gctemplate <- function(nvars, ncausers, ndependents){
...

Je connais la méthode dontrun de GSee.
Dans ma technique, l'exemple numérique et le texte expliquant l'exemple numérique sont tous deux des commentaires. J'utilise l'indentation pour faire la différence entre ces deux; Notez qu'il y a respectivement 1 dièse et 2 dièses après "# '". J'utilise toujours la technique "# '## / #' #" ci-dessus dans mes paquets. L'utilisateur est laissé à l'opération de copier-coller chaque fois qu'il veut tester la fonction. Cette technique est, selon moi, plus parallèle au bombardement de commentaires classique de la philosophie de codage logiciel.

Erdogan CEVHER
la source
14
Si vous utilisez dontrun{}, l'utilisateur peut appeler example(myFunction, run.dontrun=TRUE), alors que si vous commentez simplement les exemples, vous n'avez aucun moyen d'exécuter les exemples autrement que de copier / coller.
GSee