【发布时间】:2017-04-19 02:58:26
【问题描述】:
我使用 rcpp 在 R 包中创建了一个 cumsum 函数,它将对一个向量进行累积求和,直到它达到用户定义的天花板或地板。但是,如果希望 cumsum 有界,用户仍然必须指定一个楼层。
例子:
a = c(1, 1, 1, 1, 1, 1, 1)
如果我想 cumsum a 并且上限为 3,我可以 cumsum_bounded(a, lower = 1, upper = 3)。我宁愿不必指定下限。
我的代码:
#include <Rcpp.h>
#include <float.h>
#include <cmath>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector cumsum_bounded(NumericVector x, int upper, int lower) {
NumericVector res(x.size());
double acc = 0;
for (int i=0; i < x.size(); ++i) {
acc += x[i];
if (acc < lower) acc = lower;
else if (acc > upper) acc = upper;
res[i] = acc;
}
return res;
}
我想要什么:
#include <Rcpp.h>
#include <float.h>
#include <cmath>
#include <climits> //for LLONG_MIN and LLONG_MAX
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector cumsum_bounded(NumericVector x, long long int upper = LLONG_MAX, long long int lower = LLONG_MIN) {
NumericVector res(x.size());
double acc = 0;
for (int i=0; i < x.size(); ++i) {
acc += x[i];
if (acc < lower) acc = lower;
else if (acc > upper) acc = upper;
res[i] = acc;
}
return res;
}
【问题讨论】: