Rcpp 模块混淆 [英] Rcpp modules confusion

查看:58
本文介绍了Rcpp 模块混淆的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我无法让 RCPP_MODULERcpp::Rcpp.package.skeleton() 开始工作,我不确定我错过了什么.我将以下代码附加到包 ab 中的 rcpp_hello_world.cpp:

I'm having trouble getting RCPP_MODULE to work from Rcpp::Rcpp.package.skeleton() and am not sure what I'm missing. I appended the following code to rcpp_hello_world.cpp in my package ab:

class A {                                                                                                                                                                                                                                    
public:                                                                                                                                                                                                                                      
  int foo() {                                                                                                                                                                                                                                
    return 1;                                                                                                                                                                                                                                
  }                                                                                                                                                                                                                                          
};                                                                                                                                                                                                                                           
                                                                                                                                                                                                                                             
RCPP_MODULE(ab_module) {                                                                                                                                                                                                                     
  class_<A>("A").                                                                                                                                                                                                                            
    constructor().                                                                                                                                                                                                                           
    method("foo", &A::foo);                                                                                                                                                                                                                  
}   

然后我运行 Rcpp::compileAttributes()R CMD buildINSTALL 包.然后:

I then run Rcpp::compileAttributes() and R CMD build and INSTALL the package. Then:

R> library(ab)
R> Rcpp::Module('ab_module', inline::getDynLib('ab'))
Uninitialized module named "ab_module" from package "ab"
Uninitialized module named "ab_module" from package "~/R/x86_64-pc-linux-gnu-library/3.6/ab/libs/ab.so"
Uninitialized module named "ab_module" from package "FALSE"
Uninitialized module named "ab_module" from package "<pointer: 0x5578d469d0e0>"
Uninitialized module named "ab_module" from package "<pointer: 0x5578d35ff690>"
R> rcpp_hello_world()
[[1]]
[1] "foo" "bar"

[[2]]
[1] 0 1

> sessionInfo()
R version 3.6.3 (2020-02-29)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 18.04.4 LTS

Matrix products: default
BLAS:   /usr/lib/x86_64-linux-gnu/blas/libblas.so.3.7.1
LAPACK: /usr/lib/x86_64-linux-gnu/lapack/liblapack.so.3.7.1

locale:
 [1] LC_CTYPE=en_US.UTF-8       LC_NUMERIC=C              
 [3] LC_TIME=nl_NL.UTF-8        LC_COLLATE=en_US.UTF-8    
 [5] LC_MONETARY=nl_NL.UTF-8    LC_MESSAGES=en_US.UTF-8   
 [7] LC_PAPER=nl_NL.UTF-8       LC_NAME=C                 
 [9] LC_ADDRESS=C               LC_TELEPHONE=C            
[11] LC_MEASUREMENT=nl_NL.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] ab_1.0

loaded via a namespace (and not attached):
[1] compiler_3.6.3 inline_0.3.15  Rcpp_1.0.5 

如何初始化模块?

其他 Rcpp 代码可以在这台机器上运行,但我无法缩小这些包与此代码之间的差异.

Other Rcpp code does work on this machine but I fail to narrow down the differences between those packages and this code.

我尝试将 import(Rcpp)importFrom(Rcpp, evalCpp) 放在 NAMESPACE 中,但无济于事.

I tried putting putting import(Rcpp) or importFrom(Rcpp, evalCpp) in NAMESPACE to no avail.

推荐答案

两三个快速评论:

  1. 这确实很棘手,因为 Rcpp 模块早于 Rcpp 属性.

模块初始化来自 R 调用.你有吗

loadModule(AB_module", TRUE)

某处?请注意,它可以位于 R/ 中的任何文件中,您不是需要把它放在 .onLoad().

somewhere? Note that it can be in any file in R/, you are not required to put it in .onLoad().

上周末更新了一个包,我也被提醒你可能仍然需要使用 R_CallMethodDef() 添加 R_init_ab(DllInfo *dll) 调用.我大概可以给你举个例子.

Updating a package last weekend I also got reminded that you then still may have to add the R_init_ab(DllInfo *dll) call with R_CallMethodDef(). I can probably point you to an example.

总而言之,对于如何在 2020 年启动模块包",我们可能需要一个简单的快速入门小插图.和/或重写现有的小插图.

So in sum, we probably needs a simply quickstart vignette for 'how to start a Modules package in 2020'. And/or rewrite the existing vignette.

这篇关于Rcpp 模块混淆的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆