A documentação para os ifelseestados:
ifelseretorna um valor com a mesma forma testque é preenchido com elementos selecionados de yesou,
nodependendo se o elemento de testé TRUEou FALSE.
Como você está passando nos valores de teste de comprimento 1, está obtendo resultados de comprimento 1. Se você passar em vetores de teste mais longos, obterá resultados mais longos:
> ifelse(c(TRUE, FALSE), c(1, 2), c(3, 4))
[1] 1 4
Assim, ifelsedestina-se ao propósito específico de testar um vetor de booleanos e retornar um vetor de mesmo comprimento, preenchido com elementos retirados do (vetor) yese noargumentos.
É uma confusão comum, por causa do nome da função, usá-la quando na verdade você quer apenas uma if () {} else {}construção normal .