example - roxygen2 documentation data
Roxygen: cómo establecer un parámetro predeterminado que incluye barra invertida(''/') para funciones (5)
Bueno, frack me, el cuadro de comentarios se escapa de los caracteres de barra invertida! Me niego a agregar a la locura y agrego barras invertidas para escapar de las barras negras en el código perl que escapan de las barras diagonales en los archivos .Rd que escapan de las barras diagonales en R.
Solo duplica todas las barras invertidas.
O las 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 esta bien.
Uso Roxygen para generar archivos Rd de mis paquetes en desarrollo, pero tengo algunos problemas con las funciones con el parámetro predeterminado establecido en '' /n''
, por ejemplo:
lineCount <- function(text, sep=''/n'') {
...
}
El propósito es contar los nuevos caracteres de línea ( ''/n''
) en una cadena. El problema es que R CMD check da una advertencia sobre:
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 el hecho de escribir en el archivo Rd (escribir en los archivos LaTeX estándar a través de cat()
siempre requiere duplicar los caracteres de escape para algún propósito, por ejemplo: //newline
- como lo experimenté). Si pongo una barra invertida extra en el separador, como:
lineCount <- function(text, sep=''//n'') {
...
}
El problema sigue existiendo, como en el código que se ve como ''//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 cómo escribir los parámetros de la función en el archivo Rd? Lo siento si se me hizo una pregunta demasiado obvia, pero me perdí después de Google por un tiempo.
Historia: http://permalink.gmane.org/gmane.comp.lang.r.roxygen/24
ACTUALIZACIÓN : utilizar roxygen2 !
Experimenté un problema similar 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))
En su caso, con el carácter de nueva línea, también debería funcionar:
lineCount <- function(text, sep = intToUtf8(10))
También encontré este problema, es decir, tenía split = "/ +" y split = "/ |" En diversas funciones.
Los archivos .Rd en realidad también los representan como split = "/ +" y split = "/ |", pero lo que sea que lea los archivos .Rd en la verificación R CMD los convirtió en split = "+" y split = "/ |", y causó el error.
Si los archivos .Rd tenían split = "// +" y split = "// |" entonces sería leído correctamente.
Mi solución fue ejecutar esto en el directorio / man / con los archivos .Rd, justo antes de que R CMD verifique:
perl -e ''s / ("/// |") / "///// |" / g;'' -pi $ (encuentra BioGeoBEARS / man -type f)
perl -e ''s / ("// +") / "//// +" / g;'' -pi $ (encuentra BioGeoBEARS / man -type f)
Tomó un poco de prueba y error, pero funciona!
¡Aclamaciones! Mella
También me topé con problemas con demasiado escape "y desapareciendo. Terminé cambiando la función parse.formals en la 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 rompa nada más.
Yo tuve el mismo problema. Terminé anulando el campo de uso predeterminado como producido por roxygen a partir del código fuente con @usage. Por ejemplo, el archivo fuente R contiene
#'' @usage sourceall(dir = getwd(), pattern = ".*////.R", ...)
sourceall <- function( dir=getwd(), pattern=".*//.R", ... )
{
blah blah
}