Roxygen: como definir um parâmetro padrão, incluindo backslash ('') como funções

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

  •  26-09-2019
  •  | 
  •  

Pergunta

Eu uso o Roxygen para gerar arquivos RD dos meus pacotes em desenvolvimento, mas tenho alguns problemas com funções com o parâmetro padrão definido como '\n', por exemplo:

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

Qual objetivo é contar uma nova linha ('\n') caracteres em uma string. O problema é que a verificação R CMD dá um aviso 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: " "

O problema parece -me que causou escrita ao arquivo RD (escrevendo em arquivos de látex padrão via cat() Sempre requer caracteres de escape duas vezes para algum propósito, por exemplo: \\newline - como eu experimentei). Se eu colocar uma barra de barriga extra no separador, como:

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

O problema ainda pressiona, como no código, parece '\\n', mas nos documentos (arquivos RD) parece '\n'.

Existe uma solução fácil para o meu problema? Pode ser uma tag extra no Roxygen, que poderia definir como escrever os parâmetros da função no arquivo RD? Desculpe se fizer uma pergunta muito óbvia, mas estou perdido após o Google por um tempo.


História: http://permalink.gmane.org/gmane.comp.lang.r.roxygen/24


ATUALIZAR: usar roxygen2!

Foi útil?

Solução

Eu também encontrei problemas com muita escapado "e desaparecendo t. Acabei mudando o parse.formals função no rd2.r da Roxygen, da seguinte forma:

  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 isso ajude e não quebre mais nada.

Outras dicas

Também me deparei com esse problema, ou seja, dividido = "+" e Split = " |" em várias funções.

Os arquivos .rd também os representam como split = "+" e split = " |", mas então o que quer que lê arquivos .rd em r cmd verifique os transformá -los em split = "+" e split = " |", e causou o erro.

Se os arquivos .rd tivessem dividido = "+" e split = " |" então seria lido corretamente.

Minha solução foi executar isso no / Man / Diretório com os arquivos .rd, pouco antes da verificação R CMD:

perl -e 's/(" |")/" |"/g;' -pi $ (encontre biogeoBears/Man -Type f)

perl -e 's/("+")/"+"/g;' -pi $ (encontre biogeoBears/Man -Type f)

Demorou um pouco de tentativa e erro, mas funciona!

Felicidades! usuario

Eu tive o mesmo problema. Acabei operando o campo de uso padrão, produzido pelo Roxygen a partir do código-fonte com @USage. Por exemplo, o arquivo de origem R contém

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

Eu experimentei um problema semelhante com o 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))

No seu caso, com o personagem Newline, ele também deve funcionar:

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

Bem, Frack Me, a caixa de comentários escapa de personagens de barriga! Recuso -me a adicionar à loucura e adicionar barras de barriga para escapar das blackslashes no código Perl, que escapam das barras de barriga nos arquivos .rd que escapam das reações em R.

Basta dobrar todas as barras de barriga.

Ou tags de código HMM:

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

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

Sim isso é bom.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top