Как не запускать пример с помощью roxygen2?

96

Я сейчас пишу функцию геокодирования, которая зависит от наличия ключа Bing Maps. Очевидно, я бы предпочел не публиковать свою, а примеры без нее не работают.

Как мне включить пример, чтобы пользователи запускали вручную, но не выполняли его во время R CMD check?

Ари Б. Фридман
источник

Ответы:

149

Использовать \dontrun{}

#'@examples
#'\dontrun{
#'geocode("3817 Spruce St, Philadelphia, PA 19104")
#'geocode("Philadelphia, PA")
#'dat <- data.frame(value=runif(3),address=c("3817 Spruce St, Philadelphia, PA 19104","Philadelphia, PA","Neverneverland"))
#'geocode(dat)
#'}
GSee
источник
2
это задокументировано ?exampleи
написано в
2
@Jeroen, я считаю, что roxygen2это был @exampleтег, поэтому я думаю, что это roxygen2проблема. Я не думаю, что \example{}это действительно так - см. Cran.r-project.org/doc/manuals/…
GSee 01
2
Судя по названию темы, речь идет о синтаксисе roxygen2, а не о синтаксисе .Rd?
Jeroen
Спасибо за ответ. Сначала это не сработало для меня, потому что я использовал @exampleвместо @examples. Оба тега появляются в автозаполнении RStudio. Я счастлив сейчас.
Paul Rougieux
5
Я думаю, что правильный ответ на то, что вас просят, - это не проверять, а не запускать. См. Пример? И stackoverflow.com/questions/12038160/… . См. Также cran.r-project.org/web/packages/roxygen2/vignettes/rd.html .
Джулиан Карч
37

Можете использовать \donttest{}на своем примере. Фрагмент будет предоставлен в вашей документации, но не будет протестирован с помощью R CMD Check.

Для получения дополнительной информации -> ?example

#' @example
\donttest{
    2^2
    }

Это 2 ^ 2 не запустится, когда вы запустите devtools::check()

Убедитесь в этом сами, прежде чем судить. :)

самкарт
источник
16
Похоже, что это должен быть принятый ответ вместо dontrun. From? Example 'donttest включает код, который обычно следует запускать, но не во время проверки пакета'. тогда как 'dontrun заключает код, который не должен запускаться'. Я также получил комментарий от специалистов по обслуживанию крана о переходе с dontrun на donttest.
Джулиан Карч
3
Полностью согласен с @JulianKarls. Получил такие же отзывы от специалистов по обслуживанию CRAN.
David
11

Для тех, кто использует @example path/to/example.Rвместо @examplesтега, вы можете использовать \dontrunокружение прямо в example.Rфайле. Например

# example.R
\dontrun{
# this is a long running example
for(i in seq(1, 1e5)) { lm(mpg ~ wt, data = mtcars) }
}

# some other shorter example
2 + 2
Питер
источник
1
у меня это не работает (работает на Win 10, 64-битная, R версия 3.5.0)
JBJ
2

Ари, тоже пользуюсь roxygen2 (версия 4.1.0). Ниже приведен конец моей разметки roxygen2 в определении моей функции (gctemplate) до начала реальной части.

#' @examples
#' ## List all G-causalities in a VAR system of 5 variables that will be searched in the pattern of 1 
#' ## causer (like-independent) variable and 2 like-dependents conditional on 5-(1+2)=2 of the remaining 
#' ## variable(s) in the system. Variables are assigned to numbers 1 to nvars. 
#' ## "1 2 5 3 4" in the resulting line of gctemplate is to indicate the 
#' ## (conditonal, partial, etc.) G-causality from variable 1 to variables 2 and 5 
#' ## conditonal on variables 3 and 4.
#' # gctemplate(5,1,2)
#' ## The number of all G-causalities to be searched in the above pattern.
#' #dim(gctemplate(5,1,2))[[1]]
#' @importFrom combinat combn
#' @export
gctemplate <- function(nvars, ncausers, ndependents){
...

Я знаю метод dontrun GSee.
В моей методике числовой пример и текст, объясняющий числовой пример, являются комментариями. Я использую отступы, чтобы различать эти два; Обратите внимание, что после "#" стоит 1 диез и 2 диеза соответственно. Я всегда использую описанную выше технику "# '## / #' #" в своих пакетах. Пользователь может копировать-вставить всякий раз, когда он хочет протестировать функцию. Этот метод, на мой взгляд, больше похож на классическую бомбардировку философии программного кодирования комментариями.

Эрдоган CEVHER
источник
14
Если вы используете dontrun{}, то пользователь может позвонить example(myFunction, run.dontrun=TRUE), тогда как если вы просто закомментируете примеры, у вас не будет другого способа запустить примеры, кроме как скопировать / вставить.
GSee