Roxygen: cómo establecer un parámetro predeterminado, ya sea de barra invertida ( '\') a las funciones
Pregunta
Me utilizar para generar archivos Roxygen Rd de mis paquetes en fase de desarrollo, pero tengo algunos problemas con las funciones con el conjunto de parámetros por defecto a '\n'
, por ejemplo:.
lineCount <- function(text, sep='\n') {
...
}
¿Qué propósito es contar con nueva línea ('\n'
) caracteres de una cadena.
El problema es que el registro R CMD da una advertencia acerca de:
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: " "
El problema me parece que debe a escribir en el archivo Rd (escribir en archivos de LaTeX estándar a través de cat()
siempre requiere de caracteres de escape dobles para algún propósito, por ejemplo .: \\newline
- como he experimentado).
Si pongo una barra inversa extra al separador, como:
lineCount <- function(text, sep='\\n') {
...
}
El problema todavía presists, como en el código que parece '\\n'
, pero en los documentos (archivos Rd) se ve '\n'
.
¿Hay una solución fácil para mi problema? Puede ser una etiqueta adicional en Roxygen que podría definir la forma de escribir params de la función en el fichero Rd? Lo siento si le hace una pregunta demasiado obvio, pero estoy perdido después de que Google-ción por un tiempo.
Historia: http://permalink.gmane.org/gmane. comp.lang.r.roxygen / 24
Actualizar : uso roxygen2
Solución
También encontré con problemas con demasiada escapado "y desapareciendo \ t acabé cambiando la función parse.formals
en Rd2.R de roxygen de la siguiente manera:.
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))
}
}
Espero que ayude y no se rompe cualquier otra cosa.
Otros consejos
Me encontré con este problema también, es decir, que se había dividido = "\ +" y dividida = "\ |" en diversas funciones.
El .rd archivos de realidad también representan estos como dividida = "\ +" y dividida = "\ |", pero luego lo lee archivos .rd en jaque R CMD los convirtió en división = "+" y dividida = "\ |", y ha causado el error.
Si los archivos .rd se había dividido = "\\ +" y dividida = "\\ |" sería entonces conseguirá leído correctamente.
Mi solución fue la de ejecutar esto en la / el hombre / directorio con los archivos .rd, justo antes de la llegada R CMD:
perl -e 's / ( "\\\ |") / "\\\\\ |" / g;' -pi $ (Encontrar BioGeoBEARS / hombre type f)
perl -e 's / ( "\\ +") / "\\\\ +" / g;' -pi $ (Encontrar BioGeoBEARS / hombre type f)
Tomó un poco de ensayo y error, pero funciona!
Saludos! Nick
Yo tenía el mismo problema. Terminé en marcha anulando campo de uso predeterminada como la producida por roxygen desde el código fuente con @usage. P.ej. el archivo de origen contiene R
#' @usage sourceall(dir = getwd(), pattern = ".*\\\\.R", ...)
sourceall <- function( dir=getwd(), pattern=".*\\.R", ... )
{
blah blah
}
he experimentado un problema similar con v6.0.1 roxygen2.
# 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))
En su caso, con el carácter de nueva línea, se debe también el trabajo:
lineCount <- function(text, sep = intToUtf8(10))
Bueno, me frack, la caja de comentarios escapa caracteres de barra invertida! Me niego a añadir a la locura y añadir barras invertidas para escapar de las blackslashes en el código Perl que escapan a las barras invertidas en los archivos .rd que escapan a las reacciones violentas en I.
Sólo duplicar todas las barras invertidas.
o etiquetas de código hmm:
perl -e 's/("\\\\\|")/"\\\\\\\\\|"/g;' -pi $(find BioGeoBEARS/man -type f)
perl -e 's/("\\\\\+")/"\\\\\\\\\+"/g;' -pi $(find BioGeoBEARS/man -type f)
Si, eso es bueno.