2016-05-05 1 views
0

Я попытался подмножить свой вектор с [c(0,0,1,0,1...)], но он вернул вектор из 1s для каждого «1» в двоичном вектор, который я намеревался использовать как слайсер, а не ожидаемые значения, которые должны были быть выбраны из вектора слева.Подмножество вектора с 0s и 1s как seq (3) с использованием [c (0,0,1)]

seq(3)[as.logical(c(0,0,1))] 

работает отлично, но

seq(3)[c(0,0,1)] 

возвращает 1, который я не ожидал. Просто пытайтесь понять, как и почему он возвращает 1, вместо того, чтобы потянуть значение, которое совпадает с ИСТИННЫМ или 1.

ответ

2

Он обрабатывает c(0,0,1) как вектор указателей положения.

Редактировать: этим я имею в виду, что он принимает 0-й элемент дважды, а затем 1-й. Ничто в 0-й элемент, так что вы не получите один номер, который является первым элементом вашей последовательности, номер 1.

Если вы хотите, чтобы это было рассматриваться как Ваш вопрос предполагает, что Вы могли бы преобразовать в логический с as.logical

seq(3)[as.logical(c(0,0,1))] 
# [1] 3 
+0

Я не думаю, что это выбор из последовательности, я думаю, что его возвращение 1 означает ИСТИННО. Мой реальный вектор намного длиннее, я получаю значение 1 для каждого 1 в slicer (вектор справа). – user3507767

+1

На самом деле нет такой вещи, как «0-й элемент» в Р. Вы, наверное, знаете это, но ваша формулировка звучит так, как будто она есть. –

+1

вы можете проверить, что 'x [c (0,0,1)]' выбирает первый элемент, если вы 'rev (seq (3)) '. Вместо этого вы увидите 3. @RichardScriven True, но вы можете попробовать подмножество с помощью 'x [0]', которое дает вам вектор с нулевой длиной в результате – jamieRowen