Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Rcpp的R分位数_R_Rcpp - Fatal编程技术网

使用Rcpp的R分位数

使用Rcpp的R分位数,r,rcpp,R,Rcpp,我对如何使用Rcpp对R使用的默认分位数方法进行编码感兴趣。这里有一个基本的解决方案。正如在解决方案中所指出的,对于小向量,它不起作用 然而,我真的很想实现这里所示的base R(type7方法) 基本代码如下所示: x <- 1:100 # make a test vector probs <- c(0.05, 0.95) n <- length)x) # R code index <- 1 + (n - 1) * probs lo <- floor(index

我对如何使用Rcpp对R使用的默认分位数方法进行编码感兴趣。这里有一个基本的解决方案。正如在解决方案中所指出的,对于小向量,它不起作用

然而,我真的很想实现这里所示的base R(type7方法)

基本代码如下所示:

x <- 1:100 # make a test vector
probs <- c(0.05, 0.95)
n <- length)x)

# R code
index <- 1 + (n - 1) * probs
lo <- floor(index)
hi <- ceiling(index)
x <- sort(x, partial = unique(c(lo, hi)))
qs <- x[lo]
i <- which(index > lo)
h <- (index - lo)[i] # > 0  by construction
qs[i] <- (1 - h) * qs[i] + h * x[hi[i]]
看看您是如何使用Rcpp实现这一点的,这将非常有帮助。我使用RStudio,并且习惯于运行更简单的Rcpp代码,但我仍然坚持使用这个

任何帮助都将不胜感激

谢谢


David

像这样调用Rcpp中R的
分位数
函数怎么样

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
NumericVector quantileCpp(NumericVector x, NumericVector probs) {
  Environment stats("package:stats");
  Function quantile = stats["quantile"];
  int npr = probs.size();
  NumericVector ans(npr);
  for(int i=0; i<npr; i++){
    ans[i] = as<double>(quantile(x, probs[i]));
  }
return ans;
}
我知道这不是最快的解决方案(就计算时间而言),但却是我能想到的最简单的解决方案

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
NumericVector quantileCpp(NumericVector x, NumericVector probs) {
  Environment stats("package:stats");
  Function quantile = stats["quantile"];
  int npr = probs.size();
  NumericVector ans(npr);
  for(int i=0; i<npr; i++){
    ans[i] = as<double>(quantile(x, probs[i]));
  }
return ans;
}
> Rcpp::sourceCpp('quantileCpp.cpp')

> quantileCpp(1:100,c(0.05,0.95))
[1]  5.95 95.05

> quantile(1:100,c(0.05,0.95))
   5%   95% 
 5.95 95.05