Roxygen: wie ein Standardparameter einschließlich Backslash einzustellen ( ‚\‘) auf Funktionen

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

  •  26-09-2019
  •  | 
  •  

Frage

Ich benutze Roxygen Rd Dateien meiner Pakete in der Entwicklung zu generieren, aber ich habe einige Probleme mit Funktionen mit Standard-Parametersatz ‚\n', z.

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

Welchem ??Zweck ist es, neue Zeile ('\n') Zeichen in einer Zeichenfolge zu zählen. Das Problem ist, dass R CMD Prüfung eine Warnung gibt:

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

Das Problem scheint mir verursacht, dass auf der Rd-Datei durch Schreiben (Schreiben zum Standard LaTeX Dateien über cat() erfordert immer doppelte Escape-Zeichen für einen bestimmten Zweck, z.B .: \\newline - wie ich erfahren). Wenn ich lege einen zusätzlichen umgekehrten Schrägstrich in den Separator, wie:

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

Das Problem noch presists, wie es in dem Code es wie '\\n' aussieht, aber in der Dokumentation (Rd-Dateien) sieht es '\n'.

Gibt es eine einfache Lösung für mein Problem? Kann eine zusätzliche Markierung in Roxygen sein, die definieren könnten, wie die Funktion des params auf die Rd-Datei zu schreiben? Sorry, wenn zu offensichtlich eine Frage gestellt, aber ich bin verloren, nachdem Google-ing für eine Weile.


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


UPDATE : Verwendung roxygen2 !

War es hilfreich?

Lösung

Ich lief auch Probleme mit zu viel entkommen "und verschwinden \ t Ich landete Änderung der parse.formals Funktion in Rd2.R des roxygen wie folgt:.

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

Ich hoffe, das hilft und bricht nicht irgendetwas anderes.

Andere Tipps

ich auf dieses Problem kam auch, das heißt ich hatte Split = "\ +" und Split = "\ |" in verschiedenen Funktionen.

Die .rd Dateien tatsächlich auch diese stellen als Split = "\ +" und Split = "\ |", aber dann, was auch immer liest .rd Dateien in R CMD Check verwandelte sie in Split = "+" und Split = "\ |“, und den Fehler verursacht hat.

Wenn die .rd Dateien haben Split = "\\ +" und Split = "\\ |" es wäre dann richtig gelesen werden.

war meine Lösung dieses auf dem / man / Verzeichnis mit den .rd Dateien auszuführen, kurz vor R CMD-Check:

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

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

Nahm ein bisschen von Versuch und Irrtum, aber es funktioniert!

Prost! Nick

Ich hatte das gleiche Problem. I ended-up zwingendes Standardverwendungsfeld wie durch roxygen aus dem Quellcode mit @usage erzeugt. Z.B. die R-Quelldatei enthält

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

Ich erleben ähnliches Problem mit roxygen2 Version 6.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))

In Ihrem Fall mit den Newline-Zeichen, es sollte auch Arbeit:

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

Nun, frack mich, das Kommentarfeld entkommt Backslash Zeichen! Ich lehne es ab, um den Wahnsinn hinzuzufügen und fügen Sie Schrägstriche die blackslashes im Perl-Code zu entkommen, die die Schrägstriche in den .rd Dateien zu entkommen, die die Spielraüme in R entweichen kann.

Doppelklicken Sie einfach alle Schrägstriche.

oder hmm Code-Tags:

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

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

Ja, das ist gut.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top