Roxygen: wie ein Standardparameter einschließlich Backslash einzustellen ( ‚\‘) auf Funktionen
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 !
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.