R和Rcpp代码的等价性测试

时间:2018-01-21 19:52:54

标签: r rcpp

我有一些C ++代码可以通过Rcpp与R集成。

我的问题是

Rcpp中是否有一个函数可以提供关于C ++代码块是否与R代码块相同的逻辑输出,可能等同于same()或all.equal(),它们都在R中实现?

在R中,same()和all.equal()都需要两个R对象进行比较。在我的例子中,一个对象是R代码,另一个是C ++代码。

我无法在Rcpp文档中找到任何内容。

1 个答案:

答案 0 :(得分:1)

我想你可能在这里遇到了森林和树木的问题。

在一天结束时,这真的只是(在一个煮沸的模拟示例中):

#include <Rcpp.h>

// [[Rcpp::export]]
double csCpp(Rcpp::NumericVector x) {
  return Rcpp::sum(x);
}

/*** R
csR <- function(x) sum(x)
set.seed(42)
x <- rnorm(100)
all.equal(csR(x), csCpp(x))
*/

,毫不奇怪,它成功了:

R> Rcpp::sourceCpp("/tmp/soQ.cpp")

R> csR <- function(x) sum(x)

R> set.seed(42)

R> x <- rnorm(100)

R> all.equal(csR(x), csCpp(x))
[1] TRUE
R> 

但由于您无法通过一个输入证明所有输入的正确性,因此您将回归为不同(代表性)输入设计合适的单元测试。