簡體   English   中英

R分位數使用Rcpp

[英]R quantile using Rcpp

我對如何使用Rcpp編寫R使用的默認分位數方法感興趣。 這里有一個基本的解決方案Rcpp分位數實現 如解決方案中所述,它對於小向量也不會起作用。

但是,我真的想實現基本R(類型7方法),這里顯示https://svn.r-project.org/R/trunk/src/library/stats/R/quantile.R

基本代碼如下:

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]]

例如,它給出:

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

看看你如何使用Rcpp來解決這個問題真的很有幫助。 我使用RStudio並用於運行更簡單的Rcpp代碼,但我堅持這個。

任何幫助將非常感激。

謝謝

大衛

如何在Rcpp中調用R的quantile函數呢?

#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;
}

將代碼保存為'quantileCpp.cpp'並運行:

> 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 

我知道這不是最快的解決方案(就計算時間而言),但這是我能想到的最簡單的解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM