R использует десятичные числа в качестве номеров индексации - PullRequest
0 голосов
/ 23 октября 2018

R документация гласит:

Индексы - это числовые или символьные векторы, либо пустые (отсутствующие), либо NULL.Числовые значения приводятся к целому числу как as.integer (и, следовательно, усекаются до нуля).

Например, если у вас есть:

vector<-c(10,20,30,40,50)

и запрашивает позицию 2 этого вектора, у вас будет:

vector[2];
20

Но вы можете получить тот же результат, что и вы, если попросите индекс 2.5

vector[2.5];
20

Это очень странное поведение.Это опасное поведение для моих целей.Можно ли заставить R возвращать ошибку, если у вас есть десятичное значение в виде массива или векторного индекса?

1 Ответ

0 голосов
/ 23 октября 2018

Одна возможность - определить векторный класс с описанным поведением:

as.myvector <- function(x){
    class(x) <- c("myvector", class(x))
    x
}

`[.myvector` <- function(x, condition) {
    if(any(condition != as.integer(condition)))
        stop("Invalid index")
    class(x) <- class(x)[2]
    x[condition]
}

v <- as.myvector(c(10, 20, 30, 40, 50))

v[2]
## [1] 20
v[2.5]
## Error in `[.myvector`(v, 2.5) (from #2) : Invalid index
v[2:5]
## [1] 20 30 40 50
v[c(1.1,2:4)]
## Error in `[.myvector`(v, c(1.1, 2:4)) (from #2) : Invalid index
...