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 | e...@debian.org ______________________________________________ R-package-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-package-devel