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

Reply via email to