У меня есть пакет для R, который я разрабатывал под Linux, и пришло ужасное время, когда я тестирую его под Windows.
Документация сделана с помощью roxygen, а для сборки пакета я использую cygwin.
Дело в том, что когда я roxygenise('test-package')
, roxygen усекает раздел \usage
документации до одного символа. Это происходит с некоторыми, но не со всеми моими функциями, и я не могу понять закономерность.
Этого не происходит при запуске одной и той же команды (например, roxygenise('test-package')
из командной строки R) в Linux или Windows — только Cygwin в Windows (используя R devtools + командную строку из Windows для меня не вариант - это часть большого проекта с Makefiles и т. д.).
Во всех случаях я использую roxygen v2.2.2.
Это происходит для любой функции с параметром по умолчанию.
Я свел это к одному воспроизводимому примеру, максимально урезав его, чтобы изолировать проблему:
Из R:
# эта функция использовалась для обрезки строк, но я убрал ее полностью
# чтобы устранить его как причину проблемы
обрезка <- функция (x = 'asdf')
{
возврат( х )
}
package.skeleton('тест')
изменить trim.R
(в test/R) и добавить следующий roxygen вверху, чтобы файл выглядел так:
#' удалить пробелы из строки
#'
#' @param x строка или вектор строк для обрезки
#' @return x обрезан.
#' @экспорт
обрезать <-
функция (х = 'asdf')
{
возврат( х )
}
Запустите R и сгенерируйте документацию:
library(roxygen2)
roxygenise ('тест')
Посмотрите на получившийся файл trim.Rd
(в test/man):
\name{trim}
\псевдоним{обрезка}
\title{обрезать пробелы в строке}
\использование{
т
}
\аргументы{
...# остальная часть файла .Rd - здесь все в порядке.
Посмотрите, как там просто \usage{t}
??
Конечно, когда кто-то запускает проверку R CMD
, появляется ошибка о том, что задокументированные аргументы не отображаются в \usage
, но это потому, что \usage
усекается.
Кто-нибудь знает, почему это происходит и как это обойти? Возможно, что-то в roxygen2
основано на чем-то, что работает на Mac, Windows и Linux, но не на Cygwin?
ура (я рву на себе волосы из-за этого).
Я использовал R, установленный из диспетчера пакетов Cygwin, в отличие от моего Windows R (т.е. в C:/Program Files/R/R-2.14.2/bin
) - Я не знал, что Windows R будет работать под Cygwin.
Если я использую Windows R в Cygwin, ошибка исчезает. Если я использую Cygwin R в Cygwin, ошибка присутствует.
Я могу только предположить, что это какая-то ошибка, связанная с Cygwin R, а не с roxygen2.
Сейчас я буду использовать обходной путь использования Windows R в cygwin (на самом деле, теперь, когда я знаю, что могу это сделать, Cygwin R в любом случае не нужен!).