[R-pkg-devel] New API in R-devel & minimum version of R
On 19 March 2025 at 11:16, Ben Bolker wrote:
| FWIW Rcpp handles this (for CLOENV) with an ifdef: | | #if (defined(R_VERSION) && R_VERSION >= R_Version(4,5,0)) | return R_ClosureEnv(fun); | #else | return CLOENV(fun); | #endif | | https://github.com/RcppCore/Rcpp/blob/257e1977cd6e251d0a3d691050ad43fa29cf9666/inst/include/Rcpp/Function.h#L102-L106 Beat me to it while I was away from my desk :-) We added that last week after we good the nag from CRAN. We are to follow the r-devel version R which is accessible e.g. 'as a service' at winbuilder and macbuilder, at rhub (v2), and of course by compiling locally (as I still do). Or by using one the available containers: rocker/r-devel and rocker/drd are two I look after and they get updated weekly. Also note that when I made the update above I spotted a nice section in WRE (where one 'of course' needs the r-devel version) which has what I quote below. You could make use of that too. Dirk Quote from WRE follows 6.21.8 Some backports ? This section lists backports of recently added definitions that can be used in packages that need to be compiled under older versions of R that do not yet contain these entry points. #if R_VERSION < R_Version(4, 4, 1) #define allocLang Rf_allocLang SEXP Rf_allocLang(int n) { if (n > 0) return LCONS(R_NilValue, Rf_allocList(n - 1)); else return R_NilValue; } #endif #if R_VERSION < R_Version(4, 5, 0) # define isDataFrame(x) Rf_isFrame(x) # define R_ClosureFormals(x) FORMALS(x) # define R_ClosureEnv(x) CLOENV(x) # define R_ParentEnv(x) ENCLOS(x) SEXP R_mkClosure(SEXP formals, SEXP body, SEXP env) { SEXP fun = Rf_allocSExp(CLOSXP); SET_FORMALS(fun, formals); SET_BODY(fun, body); SET_CLOENV(fun, env); return fun; } void CLEAR_ATTRIB(SEXP x) { SET_ATTRIB(x, R_NilValue); SET_OBJECT(x, 0); UNSET_S4_OBJECT(x); } #endif
dirk.eddelbuettel.com | @eddelbuettel | edd at debian.org