Как избежать этой ошибки: только 0 могут быть смешаны с отрицательными индексами? - PullRequest
1 голос
/ 09 апреля 2019

У меня есть этот пример:

x=c(NA,  2,  -3,  -4,  -5,  -6,  -7,  -8,  -9, -10, -11,  -2,   2, -14, -15, -16, -17, 2, -19, -20)

g= head(x[!is.na(x)], 13)

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

            y=x[-(head(x[!is.na(x)], 13))]

            Is there a better way to do this?

Я получил эту ошибку:

Error in x[-(head(x[!is.na(x)], 13))] : 
 only 0's may be mixed with negative subscripts

     any idea why?

Ответы [ 2 ]

1 голос
/ 09 апреля 2019

Вы можете использовать %in%, чтобы проверить, какие значения содержатся в g, и аннулировать каждый индекс, содержащий значение, которое содержится в вашем определении g:

x[!(x %in% (head(x[!is.na(x)], 13))) | (1:length(x)) > which(cumsum(!is.na(x)) == 13)]

Ваша ошибка возникает из-за того, что вы смешиваете положительные и отрицательные индексы в подмножестве x, что не является необходимым, поскольку вам не нужно работать с индексами, а не создавать логический вектор, который дает вам место для каждого значения не содержится в g.

РЕДАКТИРОВАТЬ: Я добавил второй логический вектор, который гарантирует, что значения после индекса 13-го не NA значения не могут быть удалены, так как они никогда не могут содержаться в g (причина g является подмножеством из первых 13 не NA -значений х). Там может быть более простое решение, но это должно сделать это ..

0 голосов
/ 09 апреля 2019

Это на самом деле зависит от проблемы, которую вы решаете. Если вы хотите удалить элементы в позициях 1-10, кроме NA, используйте:

pos = c (is.na (x [1:10]), 11: длина (x))

y = x [-pos]

Если вы хотите удалить каждый элемент, который принимает то же значение, что и элементы 2:10, используйте:

setdiff (x, g)

Что касается ошибки, я думаю, что в вашем случае элементы в x представляют собой сочетание положительных и отрицательных значений. Например,

букв [c (-1, -3, 5, 6, 7)] Ошибка: только 0 могут смешиваться с отрицательными индексами

Здесь дано блестящее описание: https://www.stat.berkeley.edu/~nolan/stat133/Fall05/notes/RSubset.html

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