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 | [email protected]
______________________________________________
[email protected] mailing list
https://stat.ethz.ch/mailman/listinfo/r-package-devel