Ifelse для возврата данных, а не первого элемента [duplicate]

11
задан Blue Magister 31 January 2013 в 21:12
поделиться

3 ответа

if ( cond) { yes } else { no } является структурой управления. Он был разработан для создания программных вилок, а не для обработки последовательности. Я думаю, что многие люди пришли из SPSS или SAS, авторы которых выбрали «IF» для реализации условного присвоения в своих функциях DATA или TRANSFORM, и поэтому они ожидают, что R будет вести себя одинаково, тогда как R - из традиции программирования. R неявные for-loops встроены во множество векторизованных функций (включая ifelse).

ifelse принимает выражение, которое строит вектор логических значений в качестве первого аргумента. Второй и третий аргументы должны быть векторами равной длины, и либо первый из них, либо второй выбирается. Это похоже на команды SPSS / SAS IF, которые имеют неявный режим работы по строке.

12
ответ дан 42- 28 August 2018 в 20:40
поделиться

Из документации ifelse:

 ‘ifelse’ returns a value with the same shape as ‘test’ which is
 filled with elements selected from either ‘yes’ or ‘no’ depending
 on whether the element of ‘test’ is ‘TRUE’ or ‘FALSE’.

Таким образом, ваш вход имеет длину один, поэтому выход усечен до длины 1.

Вы также можете увидеть это проиллюстрировано более простым пример:

ifelse(TRUE, c(1, 3), 7)
# [1] 1
13
ответ дан Dason 28 August 2018 в 20:40
поделиться

По какой-то причине это помечено как дубликат . Почему ifelse () возвращает однозначный вывод?

Итак, работа для этого вопроса:

a=3
yo <- ifelse(a==1, 1, list(c(1,2)))
yo[[1]]
0
ответ дан Ram B 28 August 2018 в 20:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: