Roxygen: comment définir un paramètre par défaut, y compris la barre oblique inverse ( « \ ») aux fonctions

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

  •  26-09-2019
  •  | 
  •  

Question

J'utiliser Roxygen pour générer des fichiers Rd de mes paquets en cours de développement, mais j'ai quelques problèmes avec des fonctions avec jeu de paramètres par défaut à « \n', par exemple:.

  lineCount <- function(text, sep='\n') {
       ...
   }

Quel but est de compter une nouvelle ligne ('\n') caractères dans une chaîne. Le problème est que l'enregistrement R CMD donne un avertissement sur:

Codoc mismatches from documentation object 'lineCount':
lineCount
  Code: function(text, sep = "\n")
  Docs: function(text, sep = " ")
  Mismatches in argument default values:
    Name: 'sep' Code: "\n" Docs: " "

Le problème me semble causé par écrit au fichier Rd (écrire aux fichiers standard LaTeX via cat() nécessite toujours des caractères d'échappement double pour un but, par exemple .: \\newline - comme je l'ai fait l'expérience). Si je mets un backslash supplémentaire au séparateur, comme:

  lineCount <- function(text, sep='\\n') {
       ...
   }

Le problème encore presists, comme dans le code, il ressemble à '\\n', mais dans la documentation (fichiers Rd), il semble '\n'.

Y at-il une solution facile pour mon problème? Peut-être une étiquette supplémentaire dans Roxygen qui pourrait définir comment écrire les params de la fonction au fichier Rd? Désolé si la question posée d'une trop évidente, mais je suis perdu après Google-ing pendant un certain temps.


Histoire: http://permalink.gmane.org/gmane. comp.lang.r.roxygen / 24


UPDATE : utilisez roxygen2

Était-ce utile?

La solution

J'ai aussi rencontré des problèmes avec trop échappé "et disparaissant \ t je fini par changer la fonction parse.formals dans Rd2.R de roxygen comme suit:.

  parse.formals <- function(partitum) {
    formals <- partitum$formals
    if (!is.null(formals)) {
      formals <- lapply(formals, trim)
      formals <- lapply(formals, paste, collapse=" ")
      name.defaults <- zip.c(names(formals), formals)
      args <-
        do.call(paste, c(Map(function(name.default) {
          name <- car(name.default)
          default <- cadr(name.default)
          if (! is.character (default)) {  # too much escaped. 
                                           # Not sure when escaping is needed. 
                                           # param = c ("x", "y", "z") works now
            default <- gsubfn("\"(.*)\"",
                              function(x)
                              sprintf("\"%s\"", gsub("\"", "\\\\\"", x)),
                              as.character(default))
          }
          default <- gsub ("\t", "\\\\t", default) # the tabs and newlines are already
          default <- gsub ("\n", "\\\\n", default) # tab and newline here.
          if (is.null.string(default))
            name
          else
            sprintf('%s=%s', name, default)
        },
                             name.defaults),
                         sep=', '))

      append.Rd(usageTag(parse.function.name(partitum), args))
    }
  }

L'espoir qui aide et ne casse rien d'autre.

Autres conseils

Je suis tombé sur ce problème aussi, à savoir j'avais partagé = « \ + » et divisé = « \ | » dans diverses fonctions.

.rd fichiers qui se trouvent représentent également comme scission = « \ + » et divisé = « \ | », mais tout ce qui lit les fichiers .rd en échec R CMD les transformer en scission = « + » et divisé = "\ | », et provoqué l'erreur.

Si les fichiers .rd ont partagé = "\\ +" et divisé = "\\ |" il serait alors se lire correctement.

Ma solution a consisté à exécuter sur le / homme / répertoire avec les fichiers .rd, juste avant l'enregistrement R CMD:

perl -e 's / ( "\\\ |") / "\\\\\ |" / g;' -pi $ (trouver BioGeoBEARS / homme de type f)

perl -e 's / ( "\\ +") / "\\\\ +" / g;' -pi $ (trouver BioGeoBEARS / homme de type f)

A pris un peu d'essais et d'erreurs, mais ça marche!

Vive! Nick

J'ai eu le même problème. J'ai fini-up remplaçant champ d'utilisation par défaut tel que produit par roxygen à partir du code source avec @usage. Par exemple. le fichier source de R contient

#' @usage sourceall(dir = getwd(), pattern = ".*\\\\.R", ...)
sourceall <- function( dir=getwd(), pattern=".*\\.R", ... )
{
    blah blah
}

J'ai connu le même problème avec roxygen2 v6.0.1.

# this caused errors in R CMD check (non-ASCII chars)
f <- function(x, y, chr = "\u279B")

# this was ok
f <- function(x, y, chr = intToUtf8(0x279B))

Dans votre cas, le retour à la ligne, il devrait également fonctionner:

lineCount <- function(text, sep = intToUtf8(10))

Eh bien, moi Frack, la boîte de commentaires échappe caractères backslash! Je refuse d'ajouter à la folie et ajouter un antislash pour échapper aux blackslashes dans le code perl qui les backslashs dans les fichiers .rd qui échappent aux contrecoups de R.

Il suffit de doubler tous les antislash.

ou des balises de code hmm:

perl -e 's/("\\\\\|")/"\\\\\\\\\|"/g;' -pi $(find BioGeoBEARS/man -type f)

perl -e 's/("\\\\\+")/"\\\\\\\\\+"/g;' -pi $(find BioGeoBEARS/man -type f)

Oui, c'est bon.

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