Я бы хотел найти способ улучшить производительность этой функции.
В основном это дает область между двумя кривыми с увеличивающимся окном.
На каждой итерации range_x
, используемый для интегрирования, длиннее, пока не достигнет длины отверстия первого вектора.
library(sfsmisc) # for integrate.xy()
area_function = function(x, y_curve1, y_curve2) {
y_betw = rep(0, x) # the first value needs to be 0, it changes from the 2nd and so on.
# this loop goes from 2:length(y)
for (i in seq_along(y_curve1)[-1]) {
y_range1 = y_curve1[1:i]
y_range2 = y_curve2[1:i]
range_x = 1:length(y_range1)
y_betw[i] = integrate.xy(range_x, y_range2) - integrate.xy(range_x, y_range1)
}
return(y_betw)
}
Воспроизводимый пример с результатами:
set.seed(123)
v1 <- sample(100, 100) # first curve
v2 <- sample(100, 100) # second curve
head(area_function(length(v1), v1, v2), 5)
#[1] 0.00000 -7.50000 -48.66658 -29.62492 -49.95353