Я преподавал класс, в котором у меня были ученики, которые использовали пакет, который я написал. Теперь, когда класс заканчивается, я хотел бы предоставить им код для каждой из этих функций, встроенный в документацию для функций. Есть ли глобальный флаг, который я могу установить для этого? Какой-то взлом кода?Есть ли глобальный флаг, который может быть установлен для предоставления кода вместе с документацией ROxygen?
ответ
Вы можете предварительно обработать ваши R-файлы с помощью пакета для варки, например.
Файл 'Foo-tmp.r'
##' a function that doesn't do much
##'
##' @title foo
##' @param x
##' @param y
##' @param z
##' @return error message
##' @author Baptiste
##' @examples
##' dontrun{
#<%= cat(paste0("##'", getSrcref(foo), "\n")) %> ##' }
foo <- function(x, y, z){
rnorm(10) == 1
# inline comment
.NotYetImplemented()
" other stuff"
return(FALSE)
}
Затем обработать файл для создания foo.r
source("foo-tmp.r") # to know what the function is
brew("foo-tmp.r", "foo.r")
с результатом выхода:
##' a function that doesn't do much
##'
##' @title foo
##' @param x
##' @param y
##' @param z
##' @return error message
##' @author Baptiste
##' @examples
##' dontrun{
###'function(x, y, z){
##' rnorm(10) == 1
##' # inline comment
##' .NotYetImplemented()
##' " other stuff"
##' return(FALSE)
##' }
##' }
foo <- function(x, y, z){
rnorm(10) == 1
.NotYetImplemented()
" other stuff"
return(FALSE)
}
на самом деле вам не нужны эти два файла, brew(), вероятно, ничего не делает с обычным файлом R, поэтому вы можете без проблем перезаписывать. – baptiste
Но перезапись самого файла может привести к ситуации, когда функция и документация устарели. Опять же, если вы делаете эту документацию, а затем никогда не меняете функцию снова, это не имеет большого значения ... – Dason
Это решение намного лучше, чем ничего, но все же не так скупо, как я надеялся. Есть ли способ использовать шаблонные теги для достижения желаемого результата без изменения кода для каждой функции, которая должна быть документирована? – russellpierce
См this related question. Глобального флага или решения нет. @ baptiste так же хорош, как и получается. Ответ установлен на wiki сообщества, если это положение вещей изменится.
Вы хотите, чтобы код функции отображался в файлах справки для самого кода? Зачем? – Dason
это больше похоже на «грамотное программирование», чем «воспроизводимые исследования»: http://rpubs.com/bbolker/3153 –
@Dason: Да, это то, что я хотел бы. Зная моих пользователей, я думаю, что им будет проще находить скрипты, которые они хотят в PDF-формате, чем в пучке разбросанных ROxygen-отмеченных скриптов или даже с одним сгенерированным ROxygen скриптом. – russellpierce