Это ошибка для функции ifelse? - PullRequest
0 голосов
/ 12 января 2019

Вот мой вектор:

x <- c("a", "b", "c")

Я собираюсь извлечь только нечетные элементы из вектора, поэтому я напишу что-то вроде этого:

ifelse(length(x) > 0, x[seq(from = 1, to = length(x), by = 2)], NA)

Но возвращаемый результат - всего лишь "a". Однако, если я проверяю условие и выполняю оператор TRUE отдельно, я получаю другие результаты.

length(x) > 0   #TRUE
x[seq(from = 1, to = length(x), by = 2)]   # "a" "c"

Кто-нибудь знает почему? Спасибо!

1 Ответ

0 голосов
/ 12 января 2019

Согласно ?ifelse

Вектор такой же длины и атрибутов (включая измерения и «класс»), что и тестовые значения и значения данных из значений да или нет

где 'test', 'yes', 'no' являются аргументами

ifelse(test, yes, no)

В рассматриваемом примере существует несоответствие длины между «test», «yes», «no». Первый возвращает логический вектор длины 1, второй из 2 и третий из 1 снова. Это создает дисбаланс. В этом примере это ИСТИНА, поэтому он возвращает первый элемент «да». Вместо этого мы можем использовать if/else

if(length(x) > 0) x[seq(from = 1, to = length(x), by = 2)] else NA
#[1] "a" "c"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...