Roxygen: cómo establecer un parámetro predeterminado, ya sea de barra invertida ( '\') a las funciones

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

  •  26-09-2019
  •  | 
  •  

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

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top