Roxygen: como definir um parâmetro padrão, incluindo backslash ('') como funções
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!
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.