Answering my own question here ... The problem was that I was using
mooringS7 <- S7::new_class("mooring", ETC instead of mooringS7 <- S7::new_class("mooringS7", ETC With the change to the latter, all works fine now. Thanks very much to all who have helped, so generously and so quickly. I wish a very Happy New Year, to all!! Dan. Dan Kelley / Oceanography Department / Dalhousie University / Halifax, Nova Scotia / Canada > On Jan 3, 2024, at 3:18 PM, Daniel Kelley <kel...@dal.ca> wrote: > > Oh, Hadley, I'm sorry to bother you whilst you're on vacation. Please don't > take too much time on. I'm certainly not in a rush at all. > > To answer your question, yes, I rebuilt the documentation (within RStudio, > via the 'More/Document' scheme) and it still fails. > > I wonder if I need to do a > > method(plot, mooring:::mooringS7) <- function(ETC) {ETC} > > instead of > > `plot.mooring::mooring` <- function(ETC) {ETC} > > which is what I'm doing now, and which works for plotting but not > webpage-building. > > PS. That `mooringS7` vs `mooring` name difference is because I am using > > mooringS7 <- S7::new_class("mooring", ETC > > because I want the user-facing function to be called `mooring`. (I am having > the user using the object constructor directly. I guess I could, but I'm > doing it this way to retain my old code, which used S3 methodology and had a > fair bit of logic before constructing a return value. I can change that, of > course. For now, my S7 steps are a bit timid, so I can fall back to my S3 > code if I cannot figure things out.) > > > > On Jan 3, 2024, at 2:48 PM, Hadley Wickham <h.wick...@gmail.com> wrote: > > CAUTION: The Sender of this email is not from within Dalhousie. > Did you re-document? You’ll need that to correctly regenerate the .Rd, I > think. (Sorry I’m on vacation so I’m guessing at stuff from my phone) > > Hadley > > On Thursday, January 4, 2024, Daniel Kelley > <kel...@dal.ca<mailto:kel...@dal.ca>> wrote: > Thanks. I installed the latest roxygen2 and pkgdown, and tried to make a > simple reprex > git clone https://github.com/dankelley/mooring.git > cd mooring > git checkout S7 > Rscript -e "pkgdown::clean_site()" > Rscript -e "pkgdown::build_site()" > > but it still fails. (Full output is below, for completeness.) I wonder > whether I ought to be doing something extra in the Roxygen code (in file > R/plot.R within this directory.). Please note that I can rename it as > "draw()" or something, but I'm hoping to learn S7 properly, because I'm > really quite keen to leave my S3 and S4 days behind me. (PS to Hadley: I > loved the presentation you gave on what was then R7, and have recommended it > to colleagues not just for the R7 information, but for the concise > explanation of the benefit of OOP and generics.) > > ── Installing package mooring into temporary library > ─────────────────────────── > ── Building pkgdown site for package mooring > ─────────────────────────────────── > Reading from: /Users/kelley/wednesday/mooring > Writing to: /Users/kelley/wednesday/mooring/docs > ── Initialising site > ─────────────────────────────────────────────────────────── > Copying > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/bootstrap-toc.css, > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/bootstrap-toc.js, > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/docsearch.css, > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/docsearch.js, > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/link.svg, > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/pkgdown.css, > and > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/pkgdown.js > to bootstrap-toc.css, bootstrap-toc.js, docsearch.css, docsearch.js, link.svg, > pkgdown.css, and pkgdown.js > ── Building home > ─────────────────────────────────────────────────────────────── > Writing authors.html > Copying man/figures/Makefile, man/figures/README-example-1.png, > man/figures/README-example-2.png, man/figures/force_diagram.R, and > man/figures/force_diagram.png > to reference/figures/Makefile, reference/figures/README-example-1.png, > reference/figures/README-example-2.png, reference/figures/force_diagram.R, and > reference/figures/force_diagram.png > Writing 404.html > ── Building function reference > ───────────────────────────────────────────────── > Error: > ! in callr subprocess. > Caused by error in `map2(.x, vec_index(.x), .f, ...)`: > ! In index: 1. > --- > Standard error: > ── Building pkgdown site for package mooring > ─────────────────────────────────── > Reading from: /Users/kelley/wednesday/mooring > Writing to: /Users/kelley/wednesday/mooring/docs > ── Initialising site > ─────────────────────────────────────────────────────────── > Copying > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/bootstrap-toc.css, > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/bootstrap-toc.js, > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/docsearch.css, > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/docsearch.js, > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/link.svg, > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/pkgdown.css, > and > ../../../../Library/Frameworks/R.framework/Versions/4.3-x86_64/Resources/library/pkgdown/BS3/assets/pkgdown.js > to bootstrap-toc.css, bootstrap-toc.js, docsearch.css, docsearch.js, link.svg, > pkgdown.css, and pkgdown.js > ── Building home > ─────────────────────────────────────────────────────────────── > Writing authors.html > Copying man/figures/Makefile, man/figures/README-example-1.png, > man/figures/README-example-2.png, man/figures/force_diagram.R, and > man/figures/force_diagram.png > to reference/figures/Makefile, reference/figures/README-example-1.png, > reference/figures/README-example-2.png, reference/figures/force_diagram.R, and > reference/figures/force_diagram.png > Writing 404.html > ── Building function reference > ───────────────────────────────────────────────── > --- > Backtrace: > 1. pkgdown::build_site() > 2. pkgdown:::build_site_external(pkg = pkg, examples = examples, run_dont_run > = run_don… > 3. callr::r(function(..., cli_colors, pkgdown_internet) { … > 4. callr:::get_result(output = out, options) > 5. callr:::throw(callr_remote_error(remerr, output), parent = > fix_msg(remerr[[3]])) > --- > Subprocess backtrace: > 1. pkgdown::build_site(...) > 2. pkgdown:::build_site_local(pkg = pkg, examples = examples, run_dont_run = > run_dont_r… > 3. pkgdown::build_reference(pkg, lazy = lazy, examples = examples, > run_dont_run = run_… > 4. pkgdown::build_reference_index(pkg) > 5. pkgdown::render_page(pkg, "reference-index", data = > data_reference_index(pkg), … > 6. pkgdown:::render_page_html(pkg, name = name, data = data, depth = depth) > 7. utils::modifyList(data_template(pkg, depth = depth), data) > 8. base::stopifnot(is.list(x), is.list(val)) > 9. pkgdown:::data_reference_index(pkg) > 10. meta %>% purrr::imap(data_reference_index_rows, pkg = pkg) %>% … > 11. base::unlist(., recursive = FALSE) > 12. purrr::compact(.) > 13. purrr::discard(.x, function(x) is_empty(.f(x))) > 14. purrr:::where_if(.x, .p, ...) > 15. purrr:::map_(.x, .p, ..., .type = "logical", .purrr_error_call = > .purrr_error_call) > 16. purrr:::vctrs_vec_compat(.x, .purrr_user_env) > 17. purrr::imap(., data_reference_index_rows, pkg = pkg) > 18. purrr::map2(.x, vec_index(.x), .f, ...) > 19. purrr:::map2_("list", .x, .y, .f, ..., .progress = .progress) > 20. purrr:::with_indexed_errors(i = i, names = names, error_call = > .purrr_error_call, … > 21. base::withCallingHandlers(expr, error = function(cnd) { … > 22. purrr:::call_with_cleanup(map2_impl, environment(), .type, .progress, … > 23. local .f(.x[[i]], .y[[i]], ...) > 24. pkgdown:::section_topics(section$contents, pkg$topics, pkg$src_path) > 25. base::rbind(topics, ext_topics(ext_strings)) > 26. base::rbind(deparse.level, ...) > 27. pkgdown:::ext_topics(ext_strings) > 28. purrr::map2(pkg, fun, get_rd_from_help) > 29. purrr:::map2_("list", .x, .y, .f, ..., .progress = .progress) > 30. purrr:::with_indexed_errors(i = i, names = names, error_call = > .purrr_error_call, … > 31. base::withCallingHandlers(expr, error = function(cnd) { … > 32. purrr:::call_with_cleanup(map2_impl, environment(), .type, .progress, … > 33. local .f(.x[[i]], .y[[i]], ...) > 34. rlang::check_installed(package, "as it's used in the reference index.") > 35. base::stop(cnd) > 36. (function (cnd) … > 37. cli::cli_abort(message, location = i, name = name, parent = cnd, … > 38. | rlang::abort(message, ..., call = call, use_cli_format = TRUE, … > 39. | rlang:::signal_abort(cnd, .file) > 40. | base::signalCondition(cnd) > 41. (function (cnd) … > 42. cli::cli_abort(message, location = i, name = name, parent = cnd, … > 43. | rlang::abort(message, ..., call = call, use_cli_format = TRUE, … > 44. | rlang:::signal_abort(cnd, .file) > 45. | base::signalCondition(cnd) > 46. global (function (e) … > Execution halted > > > > On Jan 3, 2024, at 1:06 PM, Hadley Wickham > <h.wick...@gmail.com<mailto:h.wick...@gmail.com>> wrote: > > CAUTION: The Sender of this email is not from within Dalhousie. > This bug is fixed in the dev version (I don’t remember off the top of my head > in which of pkgdown and roxygen2 you need but it might be both). I’m planning > CRAN updates for both in the near future. > > Hadley > > On Thursday, January 4, 2024, Daniel Kelley > <kel...@dal.ca<mailto:kel...@dal.ca>> wrote: > # Question > > Is there an online example online of specializing `plot()` for S7 objects, > such that `pkgdown::build_site()` will produce webpages? I ask because I > find lots of users (of other packages) tend to consult websites made with > pkgdown, rather than using the online help within R. I think the problem I > am having (discussed in the following sections) has to do with my > specialization of plot(). I say that because when I was using S3 objects in > an earlier version of my package, `pkgdown::build_site()` worked as intended. > > # Background > > In my 'mooring' package (https://github.com/dankelley/mooring/tree/S7), I am > writing code like > (https://github.com/dankelley/mooring/blob/f70b53ca12e88968f65710c205b50a64f750a99d/R/plot.R#L69) > > ```R > #' @aliases plot.mooring > #' ETC > `plot.mooring::mooring` <- plot(ETC) ETC > ``` > > to handle objects made with > (https://github.com/dankelley/mooring/blob/f70b53ca12e88968f65710c205b50a64f750a99d/R/oo.R#L2) > > ```R > mooringS7 <- S7::new_class("mooring", > package = "mooring", > ETC > ``` > > Built up in Rstudio, with Roxygen2 being used to create documentation, things > seem to work, e.g. > > ```R > m <- mooring(anchor(), wire(length = 80), float(), waterDepth = 100) > plot(m) > ``` > > produces a plot as intended, and > > ```R > ?plot.mooring > ``` > > produces documentation as intended. > > *However* I encounter a problem comes when I try building a website with > > ```R > pkgdown::build_site() > ``` > > This yields results as in the next section. (I apologize for the length. I'm > including the whole thing because I thought that would be less bothersome > than writing another email to the list.) > > I am not sure how to find the problem, and so I hope that someone on this > list can point out an example of how to set up `plot()` to work with S7 > objects, in such a way that documentation can be created with Roxygen2 and > websites can be made with `pkgdown::build_site()`. > > # What pkgdown::build_site() gives > > ``` >> library(pkgdown) >> build_site() > Warning: Failed to parse usage: > > S3method(`plot`, ``mooring::mooring``)( > x, > which = "shape", > showInterfaces = TRUE, > showDepths = FALSE, > showLabels = TRUE, > showDetails = FALSE, > fancy = FALSE, > title = "", > mar = c(1.5, 3.5, 3.5, 1), > mgp = c(2, 0.7, 0), > xlim = NULL, > xaxs = "r", > yaxs = "r", > type = "l", > debug = 0, > ... > ) > > -- Installing package into temporary library ---------------- > == Building pkgdown site > ======================================================= > Reading from: '/Users/kelley/git/mooring' > Writing to: '/Users/kelley/git/mooring/docs' > -- Initialising site > ----------------------------------------------------------- > -- Building home > --------------------------------------------------------------- > Writing '404.html' > -- Building function reference > ------------------------------------------------- > Error: > ! in callr subprocess. > Caused by error in `map2(.x, vec_index(.x), .f, ...)`: > ! In index: 1. > ℹ See `$stdout` for standard output. > Type .Last.error to see the more details. >> .Last.error > <callr_error/rlib_error_3_0/rlib_error/error> > Error: > ! in callr subprocess. > Caused by error in `map2(.x, vec_index(.x), .f, ...)`: > ! In index: 1. > ℹ See `$stdout` for standard output. > --- > Backtrace: > 1. pkgdown::build_site() > 2. pkgdown:::build_site_external(pkg = pkg, examples = examples, run… > 3. callr::r(function(..., cli_colors, pkgdown_internet) { … > 4. callr:::get_result(output = out, options) > 5. callr:::throw(callr_remote_error(remerr, output), parent = fix_… > --- > Subprocess backtrace: > 1. pkgdown::build_site(...) > 2. pkgdown:::build_site_local(pkg = pkg, examples = examples, run_do… > 3. pkgdown::build_reference(pkg, lazy = lazy, examples = examples, … > 4. pkgdown::build_reference_index(pkg) > 5. pkgdown::render_page(pkg, "reference-index", data = data_referen… > 6. pkgdown:::render_page_html(pkg, name = name, data = data, depth =… > 7. utils::modifyList(data_template(pkg, depth = depth), da… > 8. base::stopifnot(is.list(x), is.list(val)) > 9. pkgdown:::data_reference_index(pkg) > 10. meta %>% purrr::imap(data_reference_index_rows, pkg = p… > 11. base::unlist(., recursive = FALSE) > 12. purrr::compact(.) > 13. purrr::discard(.x, function(x) is_empty(.f(x))) > 14. purrr:::where_if(.x, .p, ...) > 15. purrr:::map_(.x, .p, ..., .type = "logical", .purrr_error_call … > 16. purrr:::vctrs_vec_compat(.x, .purrr_user_env) > 17. purrr::imap(., data_reference_index_rows, pkg = pkg) > 18. purrr::map2(.x, vec_index(.x), .f, ...) > 19. purrr:::map2_("list", .x, .y, .f, ..., .progress = .progress) > 20. purrr:::with_indexed_errors(i = i, names = names, error_call = … > 21. base::withCallingHandlers(expr, error = function(cnd) { … > 22. purrr:::call_with_cleanup(map2_impl, environment(), .type, .pro… > 23. local .f(.x[[i]], .y[[i]], ...) > 24. pkgdown:::section_topics(section$contents, pkg$topics, pkg$src_pa… > 25. base::rbind(topics, ext_topics(ext_strings)) > 26. base::rbind(deparse.level, ...) > 27. pkgdown:::ext_topics(ext_strings) > 28. purrr::map2(pkg, fun, get_rd_from_help) > 29. purrr:::map2_("list", .x, .y, .f, ..., .progress = .progress) > 30. purrr:::with_indexed_errors(i = i, names = names, error_call = … > 31. base::withCallingHandlers(expr, error = function(cnd) { … > 32. purrr:::call_with_cleanup(map2_impl, environment(), .type, .pro… > 33. local .f(.x[[i]], .y[[i]], ...) > 34. rlang::check_installed(package, "as it's used in the reference… > 35. base::stop(cnd) > 36. (function (cnd) … > 37. cli::cli_abort(message, location = i, name = name, pare… > 38. | rlang::abort(message, ..., call = call, use_cli_format … > 39. | rlang:::signal_abort(cnd, .file) > 40. | base::signalCondition(cnd) > 41. (function (cnd) … > 42. cli::cli_abort(message, location = i, name = name, pare… > 43. | rlang::abort(message, ..., call = call, use_cli_format … > 44. | rlang:::signal_abort(cnd, .file) > 45. | base::signalCondition(cnd) > 46. global (function (e) … > ``` > > ______________________________________________ > R-package-devel@r-project.org<mailto:R-package-devel@r-project.org> mailing > list > https://stat.ethz.ch/mailman/listinfo/r-package-devel > > > -- > http://hadley.nz<http://hadley.nz/> > > > > -- > http://hadley.nz<http://hadley.nz/> > > > [[alternative HTML version deleted]] > > ______________________________________________ > R-package-devel@r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-package-devel ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel