和函数的问题

时间:2016-01-27 16:34:12

标签: r sum rcpp parallels

使用其他编程语言来加速R是一项重大创新,但似乎也很危险。任何统计函数都必须是稳定的,因为同一条目的结果相同,例如sumsdcor ... 我遇到的问题是使用大量数据(10 ^ 8样本)。我使用RCPP和RCPPPARALLEL版本的sum来演示大数据的错误。

#include <Rcpp.h>
using namespace Rcpp;
/********************************************************
 *           Rcpp inner function :sum
 *******************************************************/
// [[Rcpp::export]]
double RCPPSUM(NumericVector x) {
  return sum(x);
}

/*** R


library("Rcpp")
library("RcppParallel")
  options(digits=22)# showing more details in number  
  sourceCpp(system.file("tests/cpp/sum.cpp", package = "RcppParallel"))
##  Given two function parallelVectorSum  (RcppParallel) and vectorSum (C++STL)
##  We manipulated a very big vector
  x<-rnorm(100000000)
  (RSUM<-sum(x))
  (RCPP<-RCPPSUM(x))
  (RCPPPARALLEL<-parallelVectorSum(x))
  (STD<-vectorSum(x))
  identical(RSUM,RCPP)
  identical(STD,RCPP)
  identical(RSUM,RCPPPARALLEL)
  identical(RCPP,RCPPPARALLEL)
## Simple checking of stability
  v<-0
for(i in 1:100)v[i]<-sum(x)
  (mean(v))
  (sd(v))
####stable sd =0
  for(i in 1:100)v[i]<-vectorSum(x)
    (mean(v))
    (sd(v))
###stable sd =0
  for(i in 1:100)v[i]<-RCPPSUM(x)
  (mean(v))
  (sd(v))
###stable sd =0

  for(i in 1:100)v[i]<-parallelVectorSum(x)
  (mean(v))
  (sd(v))
##instable sd!=0
      */

我们可以将并行版本限定为不稳定版本,因此将其排除在外。 RCPP和RSUM之间的结果真的是真的吗?

1 个答案:

答案 0 :(得分:3)

简言之:

  1. 猜想警告:似乎也很危险。请备份或删除它。
  2. 请表明正确大写的礼貌。我们分别将其写为RcppRcppParallel。虽然我猜你只是引用标签所以它并不重要。
  3. 使用options(digits=22)很可爱但没用。双精度为您​​提供大约16位数字。只是希望更多不会给你更多。