【问题标题】:How to call R function (which should not be exported) from Rcpp?如何从 Rcpp 调用 R 函数(不应导出)?
【发布时间】:2021-01-05 01:29:07
【问题描述】:

我想从 Rcpp 函数调用我的包的 R 函数。 R 和 Rcpp 函数都是包rminizinc 的一部分。

目前,我正在使用如下所示的方法:

    void fun(){
        Environment rmzn_env("package:rminizinc");
        Function retModel = rmzn_env["getRModel"];
        retModel(some_object);
   }

但是,这种方法仅在我导出 getRModel() 函数时才有效。有什么方法可以调用getRModel()而不导出它,因为我希望它是一个不应该暴露给用户的辅助函数?

【问题讨论】:

    标签: r package rcpp


    【解决方案1】:

    您必须在这里获得一些元数据。可以使用基本 R 函数asNamespace 获得包含包中所有未导出函数的环境。这个函数本身可以在 Rcpp 中使用。然后,您从该函数的输出中创建一个新的 Environment,您可以从中获取未导出的函数。

    作为一个例子,让我们获取未导出的函数ggplot2:::as_lower_ascii 来处理我们传递给 Rcpp 函数的字符串:

    #include <Rcpp.h>
    using namespace Rcpp;
    
    // [[Rcpp::export]]
    CharacterVector fun(CharacterVector input){
      Function asNamespace("asNamespace");
      Environment ggplot_env = asNamespace("ggplot2");
      Function to_lower_ascii = ggplot_env["to_lower_ascii"];
      return to_lower_ascii(input);
    }
    

    所以如果我们获取这个,那么回到 R 中我们可以这样做:

    fun("HELLO WORLD")
    #> [1] "hello world"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-10-01
      • 2014-06-25
      • 1970-01-01
      • 1970-01-01
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多