В документации ifelseговорится:
ifelseвозвращает значение с той же формой, testкоторая заполнена с элементами , выбранными из либо yesили
в noзависимости от того , элемент testявляется TRUEили FALSE.
Поскольку вы передаете тестовые значения длины 1, вы получаете результаты длины 1. Если вы передаете более длинные тестовые векторы, вы получите более длинные результаты:
> ifelse(c(TRUE, FALSE), c(1, 2), c(3, 4))
[1] 1 4
So ifelseпредназначен для конкретной цели тестирования вектора логических значений и возврата вектора той же длины, заполненного элементами, взятыми из (вектора) yesи noаргументов.
Это обычная путаница из-за имени функции, когда if () {} else {}вместо этого вам нужна обычная конструкция.