[R-pkg-devel] NOTE about use of `:::`

2022-12-14 Thread David Kepplinger
Dear List, I am working on updating the pense package and refactored some of the methods. I have several functions which take the same arguments, hence I'm sending all these arguments to an internal function, called `parse_args()`. Since I want to evaluate the arguments in the caller's environment

Re: [R-pkg-devel] NOTE about use of `:::`

2022-12-14 Thread Simon Urbanek
David, why not call[[1]] <- parse_args The assignment is evaluated in your namespace so that makes sure the call is that of your function. The only downside I see is that in a stack trace you'll see the definition instead of the name. Or possibly do.call(parse_args, as.list(call[-1])) Cheers

Re: [R-pkg-devel] NOTE about use of `:::`

2022-12-14 Thread David Kepplinger
Thank you both for the suggestions. I would prefer a clean stack trace in case of errors as input errors are caught by this function and hence users might very well see errors emitted from it. It seems more informative to me if the error message would say "Error in .parse_args…" than "Error in new.

Re: [R-pkg-devel] NOTE about use of `:::`

2022-12-14 Thread Bill Dunlap
You could add an 'envir' argument to parse_args() and do your eval(..., envir=envir) stuff inside parse_args(). Then change call[[1]] <- quote(pense:::parse_args) args <- eval.parent(call) to call[[1]] <- quote(parse_args) call$envir <- parent.frame() args <- eval(call) [That code is

Re: [R-pkg-devel] NOTE about use of `:::`

2022-12-14 Thread Andrew Simmons
Here's another suggestion, not sure if it's any good, but you could structure your functions like parse_args <- function (envir = parent.frame()) { evalq(list(a = a, b = b, ..., y = y, z = z), envir) <...> } exported_fun <- function (a, b, ..., y, z) { parse_args() <...> } It's s