标题基本上说明了一切。
如果我这样做...
makeActiveBinding("x", function() runif(2), .GlobalEnv)
x
# [1] 0.7332872 0.4707796
x
# [1] 0.5500310 0.5013099
...那我有什么办法可以检查
x
吗?了解它与什么功能相关联(如果没有,为什么不)?(在这种情况下,我希望能够了解到
x
被定义为 function() runif(2)
。)
最佳答案
在 envir.c
周围有一些面条,我可以让它工作:
#include <Rcpp.h>
using namespace Rcpp ;
#define HASHSIZE(x) LENGTH(x)
#define HASHVALUE(x) TRUELENGTH(x)
// [[Rcpp::export]]
SEXP get_binding_fun( std::string name, Environment env){
SEXP symbol = Rf_install( name.c_str() );
SEXP tab = HASHTAB(env) ;
SEXP c = PRINTNAME(symbol);
// finding the hash code for the symbol
int hashcode = HASHVALUE(c) % HASHSIZE(tab);
// get the value there from the hash table
SEXP res = CAR( VECTOR_ELT(tab, hashcode ) ) ;
return res ;
}
将此保存到
.cpp
文件, sourceCpp
它并将其与此 R 代码一起使用:> makeActiveBinding("x", function() runif(2), .GlobalEnv)
> get_binding_fun("x", .GlobalEnv)
# function ()
# runif(2)
关于r - 有什么方法可以访问由 makeActiveBinding 安装的函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16069566/