Bagaimana cara menjalankan contoh menggunakan roxygen2?

96

Saya sedang menulis fungsi geocoding sekarang yang mengandalkan memiliki Bing Maps Key. Jelas saya lebih suka tidak menerbitkan milik saya, dan contoh gagal tanpa satu.

Bagaimana cara menyertakan contoh bagi pengguna untuk dijalankan secara manual, tetapi tidak dieksekusi selama R CMD check?

Ari B. Friedman
sumber

Jawaban:

149

Menggunakan \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
sumber
2
ini didokumentasikan dalam ?exampledan Menulis Ekstensi R
GSee
2
@ Jeroen, saya percaya itu roxygen2membuat @exampletag, jadi saya pikir itu roxygen2masalah. Saya rasa tidak \example{}valid - lihat cran.r-project.org/doc/manuals/…
GSee
2
Dilihat dari judul topiknya, pertanyaannya adalah tentang sintaks roxygen2 dan bukan tentang sintaks .Rd?
Jeroen
Terima kasih atas jawabannya. Itu tidak berhasil untuk saya pertama kali karena saya menggunakan, @examplebukan @examples. Kedua tag muncul dalam pelengkapan otomatis RStudio. Aku senang sekarang.
Paul Rougieux
5
Saya pikir jawaban yang benar untuk apa yang diminta adalah donttest dan bukan dontrun. Lihat? Example dan stackoverflow.com/questions/12038160/… . Lihat juga cran.r-project.org/web/packages/roxygen2/vignettes/rd.html .
Julian Karch
37

Anda dapat menggunakan \donttest{}contoh Anda. Cuplikan akan disediakan dalam dokumentasi Anda, tetapi tidak akan diuji dengan Pemeriksaan R CMD.

Untuk info lebih lanjut -> ?example

#' @example
\donttest{
    2^2
    }

2 ^ 2 ini tidak akan berjalan saat Anda berlari devtools::check()

Periksa sendiri sebelum menilai. :)

samkart
sumber
16
Tampaknya ini harus menjadi jawaban yang diterima daripada jangan lari. Dari? Contoh 'donttest menyertakan kode yang biasanya harus dijalankan, tetapi tidak selama pemeriksaan paket.' sedangkan 'dontrun menyertakan kode yang tidak boleh dijalankan.' Saya juga mendapat komentar dari pengelola cran untuk beralih dari dontrun ke donttest.
Julian Karch
3
Sangat setuju dengan @JulianKarls. Mendapat tanggapan yang sama dari pengelola CRAN.
David
11

Bagi mereka yang menggunakan @example path/to/example.Rsebagai ganti @examplestag, Anda dapat menggunakan \dontrunlingkungan langsung di example.Rfile. Sebagai contoh

# 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
Peter
sumber
1
ini tidak berfungsi untuk saya (berjalan pada Win 10, 64 bit, R versi 3.5.0)
JBJ
2

Ari, saya juga menggunakan roxygen2 (versi 4.1.0). Berikut ini adalah akhir dari mark-up roxygen2 saya dalam definisi fungsi saya (gctemplate) sampai awal bagian yang sebenarnya.

#' @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){
...

Saya tahu metode dontrun GSee.
Dalam teknik saya, contoh numerik dan teks yang menjelaskan contoh numerik keduanya adalah komentar. Saya menggunakan lekukan untuk membuat perbedaan antara keduanya; Perhatikan ada 1 kres dan 2 kres masing-masing setelah "# '". Saya selalu menggunakan teknik "# '## / #' #" di atas dalam paket saya. Pengguna dibiarkan melakukan operasi salin-tempel setiap kali ia ingin menguji fungsi tersebut. Teknik ini - menurut saya - lebih paralel dengan bombardir komentar klasik dari filosofi pengkodean perangkat lunak.

Erdogan CEVHER
sumber
14
Jika Anda menggunakan dontrun{}, maka pengguna dapat memanggil example(myFunction, run.dontrun=TRUE), sedangkan jika Anda hanya mengomentari contoh, Anda tidak memiliki cara untuk menjalankan contoh selain salin / tempel.
GSee