gpt4 book ai didi

r - 有界累积和?

转载 作者:行者123 更新时间:2023-12-02 19:09:10 25 4
gpt4 key购买 nike

如何对向量(如 cumsum )进行累积和,但有界,以便总和永远不会低于下限或高于上限?

标准 cumsum 函数将产生以下结果。

foo <- c(100, -200, 400, 200)
cumsum(foo)
# [1] 100 -100 300 500

我正在寻找像基础 cumsum 一样高效的东西功能。我希望输出如下所示。

cumsum.bounded(foo, lower.bound = 0, upper.bound = 500)
# [1] 100 0 400 500

谢谢

最佳答案

正如评论中提到的,Rcpp 是一个很好的方法。

cumsumBounded.cpp:

#include <Rcpp.h>
using namespace Rcpp;
// [[Rcpp::export]]
NumericVector cumsumBounded(NumericVector x, double low, double high) {
NumericVector res(x.size());
double acc = 0;
for (int i=0; i < x.size(); ++i) {
acc += x[i];
if (acc < low) acc = low;
else if (acc > high) acc = high;
res[i] = acc;
}
return res;
}

编译并使用新函数:

library(Rcpp)
sourceCpp(file="cumsumBounded.cpp")
foo <- c(100, -200, 400, 200)
cumsumBounded(foo, 0, 500)
# [1] 100 0 400 500

关于r - 有界累积和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21262424/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com