开发自有Rcpp包时如何正确调用其他R包的R函数?
问题原因
你遇到的报错核心原因是:R包运行环境中np默认没有被加载到搜索路径,Rcpp::Environment("package:np")无法找到对应环境,返回的字符串无法转成环境对象才抛出类型错误。
解决方案
第一步:修改Rcpp代码
将获取np包环境的逻辑改为直接读取包命名空间环境,不需要依赖包是否被加载到搜索路径,修改后的代码如下:
vec np_cv_bw(mat x, vec y){ // 直接获取np包的命名空间环境,无需包提前加载到搜索路径 Rcpp::Environment np_ns = Rcpp::Environment::namespace_env("np"); Rcpp::Function npregbw = np_ns["npregbw"]; List res = npregbw(Rcpp::_["xdat"] = x, Rcpp::_["ydat"] = Rcpp::NumericVector(y.begin(), y.end())); return as<vec>(res["bw"]); }
第二步:修改包配置
在你的R包根目录下的DESCRIPTION文件中添加如下声明,明确依赖np包:
Imports: np
验证说明
修改完成后重新编译安装你的R包即可正常调用npregbw函数,该写法完全符合CRAN对于R包调用第三方包函数的规范,不会出现环境找不到的问题。
内容的提问来源于stack exchange,提问作者Ding Li
相关产品推荐
相关产品推荐

