вычисление скорости изменения для вектора чисел - PullRequest
0 голосов
/ 27 февраля 2019

Я хочу вычислить скорость изменения вектора чисел, однако знаменатель для расчета должен быть самым первым числом в векторе.

Я могу вычислить скорость изменения между векторомчисла, но не могу придумать способ сделать самое первое число постоянным знаменателем для вычисления

Мне не нужен этот ответ

x <- seq(5, 5.5, 0.1)
TTR::ROC(x, type = "discrete")
[1]         NA 0.02000000 0.01960784 0.01923077 0.01886792 0.01851852

Вместо этого я хочу создать

0.02    0.019607843 0.019230769 0.018867925 0.018518519

Кто-нибудь знает удобную супер быструю функцию.

1 Ответ

0 голосов
/ 27 февраля 2019

Легко определить свою собственную функцию

rr1 <- function(x) diff(x) / x[-length(x)]
rr1(x)
#[1] 0.02000000 0.01960784 0.01923077 0.01886792 0.01851852

Или с классической for петлей

rr2 <- function(x) {
    r <- numeric(length(x) - 1)
    for (i in 1:(length(x) - 1)) r[i] <- (x[i + 1] - x[i]) / x[i]
    r
}
rr2(x)
#[1] 0.02000000 0.01960784 0.01923077 0.01886792 0.01851852

И microbenchmark сравнение обоих методов для большего вектора x с 10^4 записями

x <- seq(1, 1000, length.out = 10^4)
library(microbenchmark)
res <- microbenchmark(
    rr1 = rr1(x),
    rr2 = rr2(x))
#Unit: microseconds
# expr      min       lq      mean    median        uq       max neval cld
#  rr1  157.596  190.554  518.0451  472.6565  501.5825  9565.411   100  a
#  rr2 2057.669 2098.655 2397.8759 2121.2795 2227.8395 10124.874   100   b
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...