我有一些C ++代码可以通过Rcpp与R集成。
我的问题是:
Rcpp中是否有一个函数可以提供关于C ++代码块是否与R代码块相同的逻辑输出,可能等同于same()或all.equal(),它们都在R中实现?
在R中,same()和all.equal()都需要两个R对象进行比较。在我的例子中,一个对象是R代码,另一个是C ++代码。
我无法在Rcpp文档中找到任何内容。
答案 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>
但由于您无法通过一个输入证明所有输入的正确性,因此您将回归为不同(代表性)输入设计合适的单元测试。