Thanks, Duncan, for the kind advice. In my understanding, this is what I have done (or I tried to do). My code is as follows:
opt.methods <- c("Nelder-Mead", "BFGS", "nlminb") if(requireNamespace("nloptr", quietly = TRUE)) { nloptr.methods <- c("newuoa", "bobyqa", "cobyla") if(opt.method %in% nloptr.methods) require(nloptr, quietly=TRUE) opt.methods <- c(opt.methods, nloptr.methods) } <skip> if(opt.method %in% nloptr.methods) { pos <- match("package:nloptr", search()) nloptr.method <- get(paste("nloptr", opt.method, sep="::"), pos=pos) opt <- nloptr.method(<args>) } In the DESCRIPTION file there is Suggests: ggplot2, survival, nloptr However, when I run “R CMD check <etc>”, I get the following message * checking package dependencies ... ERROR Namespace dependency missing from DESCRIPTION Imports/Depends entries: ‘nloptr’ See section ‘The DESCRIPTION file’ in the ‘Writing R Extensions’ manual. * DONE And - admittedly - I have no idea about how to insert appropriate import statements in NAMESPACE. Best regards, Adelchi > On 4 Dec 2024, at 20:56, Duncan Murdoch <murdoch.dun...@gmail.com> wrote: > > On 2024-12-04 1:25 p.m., Adelchi Azzalini wrote: >> Hi. I am working on the development of an existing package (smof, on CRAN). >> My current aim is widen the list of possible optimizers from which the user >> can select one method for optimizing a certain task. Well-known >> possibilities within the base package are optim (with various options) and >> nlminb. Besides these, I am thinking of including also those of package >> nloptr, but without forcing users to install this package which perhaps they >> don't need for other purposes. Hence, I would like to import nloptr only if >> it is available on the user system; it not, I can just confine the list of >> optimizers to optim and nlminb. >> This idea implies a sort of “conditional import” of nloptr. Is this >> possible? Section 1.1.3.1 "Suggested packages" of >> https://translation.r-project.org/man/R-exts/R-exts-ko.html#Suggested-packages >> seems to hint at such a possibility. See the use of requireNamespace in the >> second paragraph. >> After elaborating along this line, I packaged my code, with nloptr listed on >> the line Suggests of DESCRIPTION. However this attempt failed a the “R CMD >> check “ stage with message >> Namespace dependency missing from DESCRIPTION Imports/Depends entries: >> ‘nloptr’ >> In addition, I have no idea of how to declare a "conditional import” in >> NAMESPACE. >> Is this idea of “conditional import” totally unfeasible, then? > > The usual way to do this is to list the package in Suggests, and then wrap > any use of it in `if (requireNamespace("pkg")) { ... }` blocks. This doesn't > quite import the functions, you would need to use the `pkg::fn` syntax to > access the functions. > > If you really want to simulate importing so that you don't need the `pkg::` > prefix, you could do it this way: In the `.onLoad` function of your package, > you would have code like > > if (requireNamespace("pkg")) { > foo <- pkg::foo > bar <- pkg::bar > } else { > foo <- stub > bar <- stub > } > > where `stub` is a function that says "you need `pkg` to use this function". > > Duncan Murdoch > ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel