ROXYGON: Как установить параметр по умолчанию, включая обратную чехлу ('') для функций
Вопрос
Я использую ROxygen для создания RD-файлов моих пакетов в разработке, но у меня есть некоторые проблемы с функциями с параметром по умолчанию, установленным на «\n'
, например:
lineCount <- function(text, sep='\n') {
...
}
Какая цель состоит в том, чтобы сосчитать новую строку ('\n'
) символы в строке. Проблема в том, что R CMD Check дает предупреждение о:
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: " "
У меня проблема, которая вызвана записью в файл RD (запись в стандартные файлы латекса через cat()
Всегда требуется двойное побег персонажей для определенной цели, например: \\newline
- Как я испытал). Если я положу дополнительную обратную косание для сепаратора, как:
lineCount <- function(text, sep='\\n') {
...
}
Проблема по-прежнему председает, как в коде, похоже, '\\n'
, но в документах (RD файлы) это выглядит '\n'
.
Есть ли простое решение для моей проблемы? Может быть дополнительный тег в ROXYGON, который может определить, как написать параметры функции в файл RD? Извините, если задал слишком очевидный вопрос, но я потерян после Google некоторое время.
История: http://permalink.gmane.org/gmane.comp.lang.r.roxygen/24.
ОБНОВИТЬ: использовать ROXYGEN2.!
Решение
Я также столкнулся с проблемами с слишком сильно сбеженным "и исчезновением t. Я закончил изменять parse.formals
Функция в RD2.R Roxygen следующим образом:
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))
}
}
Надеюсь, что поможет и ничего не нарушает.
Другие советы
Я также столкнулся с этой проблемой, т.е. я разделил = " +" и разделил = " |" в различных функциях.
Файлы .rд. и вызвал ошибку.
Если файлы .rd были разделены = " +" и разделение = " |" Затем он будет правильно прочитать.
Мое решение было запустить это в каталоге / MAN / MAN / с файлами .rd, незадолго до проверки r cmd:
Perl -e 'S / (« |») / « |» / G; -Pi $ (найти биогеообуженные / человек -тып е)
Perl -e 'S / (« +») / « +» / G;' -Pi $ (найти биогеообуженные / человек -тып е)
Взял немного испытания и ошибки, но это работает!
Ваше здоровье! Ник
У меня такая же проблема. Я закончил переопределение поля использования по умолчанию, как производится Roxygen из исходного кода с @USage. Например, исходный файл R содержит
#' @usage sourceall(dir = getwd(), pattern = ".*\\\\.R", ...)
sourceall <- function( dir=getwd(), pattern=".*\\.R", ... )
{
blah blah
}
Я испытал подобную проблему с ROXYGON2 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))
В вашем случае, с новым символом, он также должен работать:
lineCount <- function(text, sep = intToUtf8(10))
Ну, поверните меня, коробка комментариев убегает персонажем обратной косой черты! Я отказываюсь добавлять в безумие и добавлять обратные кашию, чтобы избежать черных кассов в коде Perl, который избегает обратных календов в файлах .rd, которые выходят в блэкдуки в R.
Просто удвоивайте все обратные кашилы.
Или теги кода HMM:
perl -e 's/("\\\\\|")/"\\\\\\\\\|"/g;' -pi $(find BioGeoBEARS/man -type f)
perl -e 's/("\\\\\+")/"\\\\\\\\\+"/g;' -pi $(find BioGeoBEARS/man -type f)
Да, это хорошо.