Как безопасно ничего не удалять из вектора, когда отрицательный индекс может быть целым числом (0)? - PullRequest
0 голосов
/ 12 октября 2018

Предположим, у меня есть вектор x = 1:10, и он создается путем объединения двух других векторов a = integer(0) и b = 1:10 вместе (это крайний случай).Я хочу снова разделить объединенный вектор на a и b позже.Я бы подумал, что смогу безопасно разделить их:

i = seq_along(a)
x[i]
x[-i]

Но я обнаружил, что когда я использую x[-integer(0)], я получаю integer(0), а не x, как я наивно думал.Каков наилучший способ сделать это?

1 Ответ

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

Если вы хотите использовать отрицательную индексацию, и индекс может выродиться до integer(0) (например, индекс вычисляется из which), добавьте большое значение «вне границы» к индексу.Удаление значения «вне пределов» не имеет побочного эффекта.

x <- 1:10
i <- integer(0)
x[-c(i, 11)]  ## position 11 is "out-of-bound"
# [1]  1  2  3  4  5  6  7  8  9 10

Если вы не можете установить это значение «вне пределов», вот канонический выбор: 2 ^ 31, потому что этозначение превысило диапазон представления 32-разрядного целого числа со знаком, но оно не равно Inf.


Альтернативным способом является проверка if для length(i).Например:

if (length(i)) x[-i] else x

Внимание: не используйте функцию ifelse для этой цели.

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