Функция R для нахождения суммы интервалов в векторе загадочным образом возвращает цифру c (0), но отлично работает вручную - PullRequest
0 голосов
/ 20 января 2020

Я сделал следующую функцию для нахождения суммы всех интервалов в отсортированном числовом c векторе:

sum.intervals <- function(x){
        x <- sort(x)
        acc <- 0
        for( i in 1:length(x) - 1 ){
            acc <- acc + x[i + 1] - x[i]
        }
        return(acc)
    }

При попытке использовать его я ожидаю скалярное значение, но вместо этого получаю numeric(0):

x <- c(5, 2, 7, 3)
y <- sum.intervals(x)
y
#numeric(0)

Однако при выполнении итераций вручную идея работает отлично:

x <- sort(x)
acc <- 0

i <- 1
acc <- acc + x[i + 1] - x[i]

i <- 2
acc <- acc + x[i + 1] - x[i]

i <- 3
acc <- acc + x[i + 1] - x[i]

acc
#5

Что не так с функцией?

Ответы [ 3 ]

3 голосов
/ 20 января 2020

1:length(x) - 1 должно быть 1:(length(x) - 1). Вы вычитаете 1 из каждого элемента вектора.

0 голосов
/ 20 января 2020

Мы можем сделать это и без oop

sum( x[-1] - x[-length(x)])
#[1] 5
0 голосов
/ 20 января 2020

Тебе действительно нужно все oop здесь? Просто сделай:

 sum(diff(sort(x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...