2011-01-06 1 views
22

Я использую Roxygen для генерации Rd-файлов моих пакетов под разработку, но у меня есть некоторые проблемы с функциями с параметром по умолчанию, установленным в '\n', например:Roxygen: как установить параметр по умолчанию, включая обратную косую черту ('') для функций

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

Какую цель состоит в том, чтобы посчитать новую строку ('\n') символов в строке. Проблема заключается в том, что проверка R CMD выдает предупреждение о:

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 (запись в стандартных LaTeX файлов через cat() всегда требует двойных символов эвакуационных для некоторой цели , например: \\newline - как я испытал). Если я ставлю дополнительный обратный слэш в сепаратор, как:

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

Проблема еще presists, как в коде это выглядит как '\\n', но в документации (Rd файлов) это выглядит '\n'.

Есть ли легкое решение для моей проблемы? Может быть, дополнительный тег в Roxygen, который может определить, как записать параметры функции в Rd-файл? Извините, если вас попросил слишком острый вопрос, но я потерял его после Google-времени.


История: http://permalink.gmane.org/gmane.comp.lang.r.roxygen/24


UPDATE: использовать roxygen2!

+5

Это просто ошибка в roxygen, и не требуется какая-либо дополнительная настройка. Из того, что я здесь, развитие роксигена настроено для взлета снова в ближайшем будущем, поэтому, надеюсь, скоро оно будет исправлено. – hadley

+0

Спасибо Хэдли, что делает ясные вещи. – daroczig

+0

Не могли бы вы просто подсчитать «\», а не считать «\ n»? –

ответ

3

Я также столкнулся с проблемами с слишком много убежали "и исчезающей \ т я в конечном итоге изменить 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)) 
    } 
    } 

Надежда, что помогает и ничего не сломать . еще

+0

Спасибо @cbeleites за модификацию, кажется, работает inmy case (+1). Проводка приятного и элегантного патча разработчикам может быть хорошей идеей :) – daroczig

+0

Я бы сделал это, без проблем - однако я действительно не уверен в нежелательных побочных эффектах здесь. Я думаю, что была причина, по которой «сбежали». Однако я предлагаю избежать перехода на вкладку и новые строки. BTW: мне кажется, что-то случилось с проектом - за последние месяцы список рассылки и трекер ошибок и функций не показывают активность от разработчиков. Итак, давайте надеяться на ближайшее будущее Хэдли. – cbeleites

+0

Это правда. Хотя я вижу частые обновления, сделанные @hadley на https://github.com/klutometis/roxygen – daroczig

0

я наткнулся на эту проблему также, то есть я разделила = «\ +» и раскол = «\ |». в различных функций

файлы .Rd фактически также представляют их как раскол = "\ + "и split =" \ | ", но тогда все, что читает .Rd-файлы в R CMD, проверяет t вырезали их в split = "+" и split = "\ |" и вызвали ошибку.

Если файлы .Rd были разделены = "\\ +" и split = "\\ |" тогда он будет правильно прочитан.

Мое решение было запустить это на/человек/директории с файлами .Rd, непосредственно перед проверкой R CMD:

Perl -e «s/("\\\ |") /" \\ \\\ | "/ г;» -pi $ (найти BioGeoBEARS/man-тип f)

perl -e 's/("\\ +")/"\\\\ +"/g;' -pi $ (найти BioGeoBEARS/man-тип f)

Принял немного проб и ошибок, но он работает!

Cheers! Nick

-1

Ну, frack me, окно комментариев ускользает от символов обратной косой черты!Я отказываюсь добавить к безумию и добавить обратную косую черту, чтобы избежать черных пятен в коде perl, которые избегают обратных косых черт в файлах .Rd, которые выходят из зазоров в R.

Просто удвоить все обратные косые черты.

Или код хмм теги:

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

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

Да, это хорошо.

0

У меня была та же проблема. Я закончил переопределять поле использования по умолчанию, которое было создано roxygen из исходного кода с помощью @usage. Например. исходный файл R содержит

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

У меня возникла аналогичная проблема с 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)) 

В вашем случае, с символом новой строки, она также должна работать:

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

 Смежные вопросы

  • Нет связанных вопросов^_^