Es gibt wahrscheinlich ein paar Möglichkeiten, dies zu tun, aber eine einfache Vorgehensweise wäre zu exportieren eine Funktion, die einen konstanten Wert zurückgibt und eine aktive Bindung an sie erstellt. Der Mechanismus würde funktionieren genauso gut, ob Sie eine R-Funktion oder C/C++ Funktion verwenden, und es scheint auch zu funktionieren, nachdem die zugrunde liegende Funktion entfernt wurde:
#include <Rcpp.h>
// [[Rcpp::export]]
double MyConstant() {
return 1.54;
}
/***R
MyConstant2 <- function() 1.54
makeActiveBinding("my_constant", MyConstant, .GlobalEnv)
makeActiveBinding("my_constant2", MyConstant2, .GlobalEnv)
my_constant
#[1] 1.54
my_constant2
#[1] 1.54
inherits(try(my_constant <- 2.5, TRUE), "try-error")
#[1] TRUE
inherits(try(my_constant2 <- 2.5, TRUE), "try-error")
#[1] TRUE
rm(MyConstant, MyConstant2)
my_constant
#[1] 1.54
my_constant2
#[1] 1.54
inherits(try(my_constant <- 2.5, TRUE), "try-error")
#[1] TRUE
inherits(try(my_constant2 <- 2.5, TRUE), "try-error")
#[1] TRUE
*/
Im engeren Sinne könnten Sie sie einfach im R-Code über '.onLoad()' oder '.onAttach()' definieren. Entweder nur in R-Code oder durch Schleifen über Elemente kehrt von C++ über eine Hilfsfunktion zurück. Etwas Automatisiertes zu tun ist schwieriger. Manchmal wollte ich das für 'Enum'-Typen, aber auch keine gute Lösung. –