Roxygen: come impostare un parametro di default compreso backslash ( '\') per le funzioni

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

  •  26-09-2019
  •  | 
  •  

Domanda

I utilizzare Roxygen per generare file Rd dei miei pacchetti in fase di sviluppo, ma ho alcuni problemi con le funzioni di set di parametri di default per '\n', per esempio:.

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

il cui scopo è quello di contare nuova linea ('\n') caratteri di una stringa. Il problema è che il check R CMD dà un avvertimento circa:

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: " "

Il problema mi sembra che ha causato scrivendo al file Rd (scrittura di file standard di LaTeX tramite cat() richiede sempre di caratteri di escape doppie per qualche scopo, ad es .: \\newline - come ho sperimentato). Se metto una barra rovesciata aggiuntiva al separatore, come:

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

Il problema ancora presists, come nel codice sembra '\\n', ma nella documentazione (file Rd) sembra '\n'.

C'è una soluzione facile per il mio problema? Può essere un tag in più in Roxygen che potrebbe definire come scrivere params della funzione al file Rd? Scusate se chiesto domanda un troppo evidente, ma mi sono perso dopo che Google-zione per un po '.


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


Aggiorna : l'uso roxygen2 !

È stato utile?

Soluzione

Inoltre ho incontrato problemi con troppa sfuggito "e di fuga \ t Ho finito per cambiare la funzione parse.formals in Rd2.R di roxygen come segue:.

  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))
    }
  }

La speranza che aiuta e non si rompe qualsiasi altra cosa.

Altri suggerimenti

mi sono imbattuto in questo problema anche, vale a dire ho avuto split = "\ +" e split = "\ |" in varie funzioni.

Il .rd file effettivamente rappresentano anche questi come split = "\ +" e split = "\ |", ma poi tutto ciò che legge i file .rd sotto controllo R CMD li ha trasformati in split = "+" e split = "\ |", e ha causato l'errore.

Se i file .rd avevano spaccato = "\\ +" e split = "\\ |" sarebbe quindi ottenere leggere correttamente.

La mia soluzione era quella di eseguire questo sul / uomo / directory con i file .rd, poco prima del check R CMD:

perl -e 's / ( "\\\ |") / "\\\\\ |" / g;' -PI $ (trovare BioGeoBEARS / uomo -type f)

perl -e 's / ( "\\ +") / "\\\\ +" / g;' -PI $ (trovare BioGeoBEARS / uomo -type f)

Ha preso un po 'di tentativi ed errori, ma funziona!

Cheers! Nick

Ho avuto lo stesso problema. Ho finito-up ignorando utilizzo campo di default come prodotto da roxygen dal codice sorgente con @usage. Per esempio. il file sorgente R contiene

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

ho sperimentato problema simile con 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))

Nel tuo caso, con il carattere di nuova riga, dovrebbe funzionare anche:

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

Bene, mi Frack, la casella di commento sfugge barre rovesciate! Mi rifiuto di aggiungere alla follia e aggiungere le barre rovesciate per sfuggire alle blackslashes nel codice Perl che sfuggono i backslash nei file .rd che sfuggono i contraccolpi in R.

Basta raddoppiare tutte le barre rovesciate.

o tag codice hmm:

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

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

Sì che di buono.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top