fusen
とはRMarkdown ファイルから R パッケージを生成するパッケージ。
公式ドキュメント: Build a Package from Rmarkdown File • fusen
例えば次のような形で関数の定義、例、テストを書くことができる
# ベクトルの中央値を計算する
```{r function}
#' 中央値の計算
#'
#' @param x 数値ベクトル
#' @inheritParams stats::median
#'
#' @return
#' ベクトル x の中央値
#' @export
#'
#' @examples
my_median <- function(x, na.rm = TRUE) {
if (!is.numeric(x)) {stop("x は数値型である必要があります")}
stats::median(x, na.rm = na.rm)
}
```
```{r examples}
my_median(1:12)
```
```{r tests}
test_that("my_median が正しく動作し、必要なときにはエラーが発生すること", {
expect_true(my_median(1:12) == 6.5)
expect_error(my_median("text"))
})
```
install.packages("fusen")
teaching
を選択full
を選択create_fusen("path/to/new/project", template = "teaching")
を実行する。description
という名前のチャンクでパッケージの説明やライセンスを聞かれるので、その内容を編集して実行する。
fill_description(fields = list(Title = "My Awesome Package"))
usethis::use_mit_license("Sébastien Rochette")
fusen::inflate(
flat_file = "dev/flat_teaching.Rmd",
vignette_name = "Get started",
check = TRUE
)
これだけでパッケージが作成されている。
今度は作成したパッケージをテストする:
remotes::install_local()
my.package::my_median(1:12)
# {pkgdown} でサイトをビルドしてみる
usethis::use_pkgdown()
pkgdown::build_site()
# > references や articles を見てみる
fusen::inflate()
で生成されたファイル vignette/get-started.Rmd
は、 pkgdown によってこのサイト上のページ articles/get-started.html に変換される。
function
チャンクを書く。examples
と tests
チャンクは関連する function
チャンクの直後に置く。function
チャンクにサブ関数を書くこともできる。同じチャンクの関数は同じ R ファイルに書き込まれるが、サブ関数は @examples
を持つことができない。examples
は最初の関数だけに反映される。examples-1
, examples-2
, … のように区別する。fusen::inflate()
を実行したとき、デフォルトでは R CMD check が実行される。
check = FALSE
で良いと思う。devtools::test()
で行う。