From 43b6815c4bb456744e91011d9821fcfa8e16612c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Sun, 15 Jan 2017 18:05:56 +0100 Subject: [PATCH 01/15] Revert "use from_wd as fallback" - Using working directory as fallback produces wrong results, reverted. This reverts commit 22ade4c1b11c20f9e6fca80f229b0c553a6c8c7b. --- R/here.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/here.R b/R/here.R index dcae654..5424c1f 100644 --- a/R/here.R +++ b/R/here.R @@ -18,7 +18,7 @@ here <- function(...) { #' @import rprojroot .onLoad <- function(libname, pkgname) { - crit <- is_rstudio_project | is_r_package | is_remake_project | from_wd + crit <- is_rstudio_project | is_r_package | is_remake_project .root_env$f <- crit$make_fix_file() } From 260f4900c431168a8cfc2b5a688e8f7adfb75f2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Sun, 15 Jan 2017 18:07:21 +0100 Subject: [PATCH 02/15] save criterion in local environment --- R/here.R | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/R/here.R b/R/here.R index 5424c1f..25d08ca 100644 --- a/R/here.R +++ b/R/here.R @@ -18,11 +18,11 @@ here <- function(...) { #' @import rprojroot .onLoad <- function(libname, pkgname) { - crit <- is_rstudio_project | is_r_package | is_remake_project - - .root_env$f <- crit$make_fix_file() + .root_env$crit <- is_rstudio_project | is_r_package | is_remake_project + .root_env$f <- .root_env$crit$make_fix_file() } .onAttach <- function(libname, pkgname) { - packageStartupMessage("here() starts at ", .root_env$f()) + root <- .root_env$f() + packageStartupMessage("here() starts at ", root) } From c6059a8de974673beaa2cd22bf1ec6bf3b180062 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Sun, 15 Jan 2017 18:08:39 +0100 Subject: [PATCH 03/15] also recognize projectile and VCS projects --- R/here.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/here.R b/R/here.R index 25d08ca..ae2ab23 100644 --- a/R/here.R +++ b/R/here.R @@ -18,7 +18,7 @@ here <- function(...) { #' @import rprojroot .onLoad <- function(libname, pkgname) { - .root_env$crit <- is_rstudio_project | is_r_package | is_remake_project + .root_env$crit <- is_rstudio_project | is_r_package | is_remake_project | is_projectile_project | is_vcs_root .root_env$f <- .root_env$crit$make_fix_file() } From f8ce7d2b38f59260955736502c3d9053a978b301 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Sun, 15 Jan 2017 18:10:27 +0100 Subject: [PATCH 04/15] up dep --- DESCRIPTION | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 6b3ecb9..f21587c 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -3,7 +3,7 @@ Title: A Simpler Way to Find Your Files Version: 0.0-5 Authors@R: person("Kirill", "Müller", role = c("aut", "cre"), email = "krlmlr+r@mailbox.org") Description: Constructs paths to your project's files. -Imports: rprojroot (>= 1.1) +Imports: rprojroot (>= 1.2) License: GPL-3 Encoding: UTF-8 LazyData: true From 1fb338915248417a3a74bc2b6fd73f32eb3cf141 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Sun, 15 Jan 2017 18:13:28 +0100 Subject: [PATCH 05/15] doc --- R/here.R | 4 +++- man/here.Rd | 5 +++-- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/R/here.R b/R/here.R index ae2ab23..c6064e3 100644 --- a/R/here.R +++ b/R/here.R @@ -2,8 +2,10 @@ #' #' Uses a reasonable heuristics to find your project's files, based on the #' current working directory when the package is loaded. +#' Intended for interactive use only. #' Use [rprojroot::has_file()] or the other functions in -#' the \pkg{rprojroot} package for more control. +#' the \pkg{rprojroot} package for more control, +#' or for package development. #' #' @param ... \code{[character]}\cr #' Path components below the project root, can be empty. diff --git a/man/here.Rd b/man/here.Rd index d6ae8e7..dcc7aff 100644 --- a/man/here.Rd +++ b/man/here.Rd @@ -13,10 +13,11 @@ Path components below the project root, can be empty.} \description{ Uses a reasonable heuristics to find your project's files, based on the current working directory when the package is loaded. +Intended for interactive use only. Use \code{\link[rprojroot:has_file]{rprojroot::has_file()}} or the other functions in -the \pkg{rprojroot} package for more control. +the \pkg{rprojroot} package for more control, +or for package development. } \examples{ here() } - From 7dfcdc72467e433c2ecf2b35d5568a91b6b437c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Sun, 15 Jan 2017 18:31:17 +0100 Subject: [PATCH 06/15] dr_here(), fixes #2 - New `dr_here()`, describes why `here()` has settled for a particular path. --- NAMESPACE | 1 + R/here.R | 28 ++++++++++++++++++++++++---- man/here.Rd | 14 ++++++++++++-- 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/NAMESPACE b/NAMESPACE index e73cd6b..4a937fe 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -1,4 +1,5 @@ # Generated by roxygen2: do not edit by hand +export(dr_here) export(here) import(rprojroot) diff --git a/R/here.R b/R/here.R index c6064e3..994d8d9 100644 --- a/R/here.R +++ b/R/here.R @@ -1,7 +1,7 @@ #' Find your files #' -#' Uses a reasonable heuristics to find your project's files, based on the -#' current working directory when the package is loaded. +#' `here()` uses a reasonable heuristics to find your project's files, based on +#' the current working directory when the package is loaded. #' Intended for interactive use only. #' Use [rprojroot::has_file()] or the other functions in #' the \pkg{rprojroot} package for more control, @@ -16,6 +16,27 @@ here <- function(...) { .root_env$f(...) } +#' @rdname here +#' @description `dr_here()` shows a message that by default also includes the +#' reason why `here()` is set to a particular directory. Use this function +#' if `here()` gives unexpected results. +#' @param show_reason Include reason in output of `dr_here()`, defaults to +#' `TRUE`. +#' @export +dr_here <- function(show_reason = TRUE) { + message(format_dr_here(show_reason = show_reason)) +} + +format_dr_here <- function(show_reason) { + root <- .root_env$f() + paste0( + "here() starts at ", root, + if (show_reason) { + paste0(", because it ", get_root_desc(.root_env$crit, root)) + } + ) +} + .root_env <- new.env(parent = emptyenv()) #' @import rprojroot @@ -25,6 +46,5 @@ here <- function(...) { } .onAttach <- function(libname, pkgname) { - root <- .root_env$f() - packageStartupMessage("here() starts at ", root) + packageStartupMessage(format_dr_here(show_reason = FALSE)) } diff --git a/man/here.Rd b/man/here.Rd index dcc7aff..aff7021 100644 --- a/man/here.Rd +++ b/man/here.Rd @@ -2,21 +2,31 @@ % Please edit documentation in R/here.R \name{here} \alias{here} +\alias{dr_here} \title{Find your files} \usage{ here(...) + +dr_here(show_reason = TRUE) } \arguments{ \item{...}{\code{[character]}\cr Path components below the project root, can be empty.} + +\item{show_reason}{Include reason in output of \code{dr_here()}, defaults to +\code{TRUE}.} } \description{ -Uses a reasonable heuristics to find your project's files, based on the -current working directory when the package is loaded. +\code{here()} uses a reasonable heuristics to find your project's files, based on +the current working directory when the package is loaded. Intended for interactive use only. Use \code{\link[rprojroot:has_file]{rprojroot::has_file()}} or the other functions in the \pkg{rprojroot} package for more control, or for package development. + +\code{dr_here()} shows a message that by default also includes the +reason why \code{here()} is set to a particular directory. Use this function +if \code{here()} gives unexpected results. } \examples{ here() From df47a218b1b09613f09e6f39e05cf78e342eda1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Mon, 16 Jan 2017 11:47:57 +0100 Subject: [PATCH 07/15] new set_here(), closes #1 - New `set_here()` function that creates a `.here` file and talks about it by default (#1). --- NAMESPACE | 1 + R/here.R | 28 +++++++++++++++++++++++++++- man/here.Rd | 8 ++++++++ 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/NAMESPACE b/NAMESPACE index 4a937fe..fba6d01 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -2,4 +2,5 @@ export(dr_here) export(here) +export(set_here) import(rprojroot) diff --git a/R/here.R b/R/here.R index 994d8d9..3ac0e0d 100644 --- a/R/here.R +++ b/R/here.R @@ -37,11 +37,37 @@ format_dr_here <- function(show_reason) { ) } +#' @rdname here +#' @description `set_here()` creates an empty file named `.here`, by default +#' in the current directory. When `here` encounters such a file, it uses the +#' directory that contains this file as root. This is useful if none of the +#' default criteria apply. +#' @export +set_here <- function(path = ".", verbose = TRUE) { + path <- normalizePath(path) + file_path <- file.path(path, ".here") + + if (file.exists(file_path)) { + if (verbose) { + message("File .here already exists in ", path) + } + } else { + writeLines(character(), file_path) + if (verbose) { + message("Created file .here in ", path) + } + } + + invisible(file_path) +} + +is_here <- has_file(".here") + .root_env <- new.env(parent = emptyenv()) #' @import rprojroot .onLoad <- function(libname, pkgname) { - .root_env$crit <- is_rstudio_project | is_r_package | is_remake_project | is_projectile_project | is_vcs_root + .root_env$crit <- is_here | is_rstudio_project | is_r_package | is_remake_project | is_projectile_project | is_vcs_root .root_env$f <- .root_env$crit$make_fix_file() } diff --git a/man/here.Rd b/man/here.Rd index aff7021..b04c8c4 100644 --- a/man/here.Rd +++ b/man/here.Rd @@ -3,11 +3,14 @@ \name{here} \alias{here} \alias{dr_here} +\alias{set_here} \title{Find your files} \usage{ here(...) dr_here(show_reason = TRUE) + +set_here(path = ".", verbose = TRUE) } \arguments{ \item{...}{\code{[character]}\cr @@ -27,6 +30,11 @@ or for package development. \code{dr_here()} shows a message that by default also includes the reason why \code{here()} is set to a particular directory. Use this function if \code{here()} gives unexpected results. + +\code{set_here()} creates an empty file named \code{.here}, by default +in the current directory. When \code{here} encounters such a file, it uses the +directory that contains this file as root. This is useful if none of the +default criteria apply. } \examples{ here() From 5ec54da8be45f6a04c42712f27ec14b3f2524844 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Mon, 16 Jan 2017 11:49:45 +0100 Subject: [PATCH 08/15] document --- R/here.R | 6 ++++-- man/here.Rd | 7 +++++-- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/R/here.R b/R/here.R index 3ac0e0d..81780a5 100644 --- a/R/here.R +++ b/R/here.R @@ -20,8 +20,8 @@ here <- function(...) { #' @description `dr_here()` shows a message that by default also includes the #' reason why `here()` is set to a particular directory. Use this function #' if `here()` gives unexpected results. -#' @param show_reason Include reason in output of `dr_here()`, defaults to -#' `TRUE`. +#' @param show_reason \code{[logical(1)]}\cr +#' Include reason in output of `dr_here()`, defaults to `TRUE`. #' @export dr_here <- function(show_reason = TRUE) { message(format_dr_here(show_reason = show_reason)) @@ -42,6 +42,8 @@ format_dr_here <- function(show_reason) { #' in the current directory. When `here` encounters such a file, it uses the #' directory that contains this file as root. This is useful if none of the #' default criteria apply. +#' @param verbose \code{[logical(1)]}\cr +#' Verbose output, defaults to `TRUE`. #' @export set_here <- function(path = ".", verbose = TRUE) { path <- normalizePath(path) diff --git a/man/here.Rd b/man/here.Rd index b04c8c4..be0d56d 100644 --- a/man/here.Rd +++ b/man/here.Rd @@ -16,8 +16,11 @@ set_here(path = ".", verbose = TRUE) \item{...}{\code{[character]}\cr Path components below the project root, can be empty.} -\item{show_reason}{Include reason in output of \code{dr_here()}, defaults to -\code{TRUE}.} +\item{show_reason}{\code{[logical(1)]}\cr +Include reason in output of \code{dr_here()}, defaults to \code{TRUE}.} + +\item{verbose}{\code{[logical(1)]}\cr +Verbose output, defaults to \code{TRUE}.} } \description{ \code{here()} uses a reasonable heuristics to find your project's files, based on From 2bdd60ddd24330ebc69bab66355a01f7f379c933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Mon, 16 Jan 2017 12:24:07 +0100 Subject: [PATCH 09/15] doc tweaks --- R/here.R | 8 ++++++-- man/here.Rd | 15 ++++++++++----- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/R/here.R b/R/here.R index 81780a5..31df461 100644 --- a/R/here.R +++ b/R/here.R @@ -1,8 +1,11 @@ #' Find your files #' #' `here()` uses a reasonable heuristics to find your project's files, based on -#' the current working directory when the package is loaded. -#' Intended for interactive use only. +#' the current working directory at the time when the package is loaded. +#' Use it as a drop-in replacement for [file.path()], it will always locate the +#' files relative to your project root. +#' +#' This package is intended for interactive use only. #' Use [rprojroot::has_file()] or the other functions in #' the \pkg{rprojroot} package for more control, #' or for package development. @@ -12,6 +15,7 @@ #' @export #' @examples #' here() +#' \dontrun{here("some/path/below/your/project/root.txt")} here <- function(...) { .root_env$f(...) } diff --git a/man/here.Rd b/man/here.Rd index be0d56d..27e087d 100644 --- a/man/here.Rd +++ b/man/here.Rd @@ -24,11 +24,9 @@ Verbose output, defaults to \code{TRUE}.} } \description{ \code{here()} uses a reasonable heuristics to find your project's files, based on -the current working directory when the package is loaded. -Intended for interactive use only. -Use \code{\link[rprojroot:has_file]{rprojroot::has_file()}} or the other functions in -the \pkg{rprojroot} package for more control, -or for package development. +the current working directory at the time when the package is loaded. +Use it as a drop-in replacement for \code{\link[=file.path]{file.path()}}, it will always locate the +files relative to your project root. \code{dr_here()} shows a message that by default also includes the reason why \code{here()} is set to a particular directory. Use this function @@ -39,6 +37,13 @@ in the current directory. When \code{here} encounters such a file, it uses the directory that contains this file as root. This is useful if none of the default criteria apply. } +\details{ +This package is intended for interactive use only. +Use \code{\link[rprojroot:has_file]{rprojroot::has_file()}} or the other functions in +the \pkg{rprojroot} package for more control, +or for package development. +} \examples{ here() +\dontrun{here("some/path/below/your/project/root.txt")} } From e6ef78169c7e460968154b612a937c6357e9cecf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Mon, 16 Jan 2017 12:24:43 +0100 Subject: [PATCH 10/15] add description of root criteria klutometis/roxygen#561 --- R/here.R | 14 ++++++++++++++ man/here.Rd | 14 ++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/R/here.R b/R/here.R index 31df461..93f1051 100644 --- a/R/here.R +++ b/R/here.R @@ -10,6 +10,8 @@ #' the \pkg{rprojroot} package for more control, #' or for package development. #' +#' @evalRd format_root_section() +#' #' @param ... \code{[character]}\cr #' Path components below the project root, can be empty. #' @export @@ -80,3 +82,15 @@ is_here <- has_file(".here") .onAttach <- function(libname, pkgname) { packageStartupMessage(format_dr_here(show_reason = FALSE)) } + +format_root_section <- function() { + paste( + "\\section{Project root}{", + "Starting with the current working directory during package load time, `here` will walk the directory hierarchy upwards until it finds ome that satisfies at least one of the following conditions:", + paste(format(.root_env$crit)[-1], collapse = "\n"), + "", + "Once established, the root directory doesn't change during the active R session. `here()` then appends the arguments to the root directory.", + "}", + sep = "\n" + ) +} diff --git a/man/here.Rd b/man/here.Rd index 27e087d..27ea903 100644 --- a/man/here.Rd +++ b/man/here.Rd @@ -47,3 +47,17 @@ or for package development. here() \dontrun{here("some/path/below/your/project/root.txt")} } +\section{Project root}{ +Starting with the current working directory during package load time, \code{here} will walk the directory hierarchy upwards until it finds ome that satisfies at least one of the following conditions: +\itemize{ +\item contains a file \code{.here} +\item contains a file matching \code{[.]Rproj$} with contents matching \code{^Version:} in the first line +\item contains a file \code{DESCRIPTION} with contents matching \code{^Package:} +\item contains a file \code{remake.yml} +\item contains a file \code{.projectile} +\item contains a directory \code{.git} +\item contains a directory \code{.svn} +} + +Once established, the root directory doesn't change during the active R session. \code{here()} then appends the arguments to the root directory. +} From 243c5853e11f011445a5c345f07c95e345f6ab12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Mon, 16 Jan 2017 12:26:31 +0100 Subject: [PATCH 11/15] oops --- R/here.R | 2 +- man/here.Rd | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/R/here.R b/R/here.R index 93f1051..a03a7da 100644 --- a/R/here.R +++ b/R/here.R @@ -86,7 +86,7 @@ is_here <- has_file(".here") format_root_section <- function() { paste( "\\section{Project root}{", - "Starting with the current working directory during package load time, `here` will walk the directory hierarchy upwards until it finds ome that satisfies at least one of the following conditions:", + "Starting with the current working directory during package load time, `here` will walk the directory hierarchy upwards until it finds a directory that satisfies at least one of the following conditions:", paste(format(.root_env$crit)[-1], collapse = "\n"), "", "Once established, the root directory doesn't change during the active R session. `here()` then appends the arguments to the root directory.", diff --git a/man/here.Rd b/man/here.Rd index 27ea903..6afbcbe 100644 --- a/man/here.Rd +++ b/man/here.Rd @@ -48,7 +48,7 @@ here() \dontrun{here("some/path/below/your/project/root.txt")} } \section{Project root}{ -Starting with the current working directory during package load time, \code{here} will walk the directory hierarchy upwards until it finds ome that satisfies at least one of the following conditions: +Starting with the current working directory during package load time, \code{here} will walk the directory hierarchy upwards until it finds a directory that satisfies at least one of the following conditions: \itemize{ \item contains a file \code{.here} \item contains a file matching \code{[.]Rproj$} with contents matching \code{^Version:} in the first line From 1fa7d89e17c3f7e78bef72cc83de8cf1f02ebdf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Mon, 16 Jan 2017 12:26:42 +0100 Subject: [PATCH 12/15] bump version to 0.0-6 --- DESCRIPTION | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index f21587c..68be904 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,13 +1,13 @@ Package: here Title: A Simpler Way to Find Your Files -Version: 0.0-5 +Version: 0.0-6 Authors@R: person("Kirill", "Müller", role = c("aut", "cre"), email = "krlmlr+r@mailbox.org") Description: Constructs paths to your project's files. Imports: rprojroot (>= 1.2) License: GPL-3 Encoding: UTF-8 LazyData: true -Date: 2016-10-29 +Date: 2017-01-16 URL: https://github.com/krlmlr/here, http://krlmlr.github.io/here BugReports: https://github.com/krlmlr/here/issues Roxygen: list(markdown = TRUE) From 36918508f9f7f7a01b1d382fd8debff359066454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Mon, 16 Jan 2017 12:27:05 +0100 Subject: [PATCH 13/15] NEWS --- NEWS.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/NEWS.md b/NEWS.md index 09f339e..395d5dc 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,11 @@ +## here 0.0-6 (2017-01-16) + +- New `set_here()` function that creates a `.here` file and talks about it by default (#1). +- New `dr_here()`, describes why `here()` has settled for a particular path. +- Recognize projectile projects and VCS roots. +- Using working directory as fallback produces wrong results, reverted. + + ## here 0.0-5 (2016-10-29) - `remake` projects are also recognized by default. From 48c4bbad32da784880f5000e5c1391e66c9ac137 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Mon, 16 Jan 2017 12:30:25 +0100 Subject: [PATCH 14/15] add remote --- DESCRIPTION | 1 + 1 file changed, 1 insertion(+) diff --git a/DESCRIPTION b/DESCRIPTION index 68be904..c31ef61 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -12,3 +12,4 @@ URL: https://github.com/krlmlr/here, http://krlmlr.github.io/here BugReports: https://github.com/krlmlr/here/issues Roxygen: list(markdown = TRUE) RoxygenNote: 5.0.1.9000 +Remotes: krlmlr/rprojroot@r-1.2 From 93491bef5c37f52301584e88e9d0da590ba7f7fc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kirill=20M=C3=BCller?= Date: Mon, 16 Jan 2017 12:41:04 +0100 Subject: [PATCH 15/15] document --- R/here.R | 2 ++ man/here.Rd | 3 +++ 2 files changed, 5 insertions(+) diff --git a/R/here.R b/R/here.R index a03a7da..119bef9 100644 --- a/R/here.R +++ b/R/here.R @@ -48,6 +48,8 @@ format_dr_here <- function(show_reason) { #' in the current directory. When `here` encounters such a file, it uses the #' directory that contains this file as root. This is useful if none of the #' default criteria apply. +#' @param path \code{[character(1)]}\cr +#' Directory where to create `.here` file, defaults to the current directory. #' @param verbose \code{[logical(1)]}\cr #' Verbose output, defaults to `TRUE`. #' @export diff --git a/man/here.Rd b/man/here.Rd index 6afbcbe..819edcf 100644 --- a/man/here.Rd +++ b/man/here.Rd @@ -19,6 +19,9 @@ Path components below the project root, can be empty.} \item{show_reason}{\code{[logical(1)]}\cr Include reason in output of \code{dr_here()}, defaults to \code{TRUE}.} +\item{path}{\code{[character(1)]}\cr +Directory where to create \code{.here} file, defaults to the current directory.} + \item{verbose}{\code{[logical(1)]}\cr Verbose output, defaults to \code{TRUE}.} }