13

タイトルは基本的にすべてを言います。

私がこれをしたら...

makeActiveBinding("x", function() runif(2), .GlobalEnv)
x
# [1] 0.7332872 0.4707796
x
# [1] 0.5500310 0.5013099

...では、xそれがどの機能にリンクされているかを調べる方法はありますか(そうでない場合は、なぜですか)?

x(この場合、が と定義されていたことを学習できるようにしたいと考えていますfunction() runif(2)。)

4

1 に答える 1

12

を少しいじるだけで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ファイルに保存し、次のsourceCppR コードで使用します。

> makeActiveBinding("x", function() runif(2), .GlobalEnv)
> get_binding_fun("x", .GlobalEnv)
# function ()
# runif(2)
于 2013-04-17T22:43:39.003 に答える