La longueur du retour est entièrement décidée par length(a == 1)
. Voir également le fichier d'aide avec ?ifelse
. Votre code ne renverra qu'une seule valeur.
ifelse
cible l'entrée/sortie de vecteur. Même si vous obtenez la longueur correcte, par exemple : ifelse(rep(TRUE, 6), mat, mat2)
, vous obtenez un vecteur plutôt qu'une sortie de matrice. Ainsi, un appel extérieur de matrix
pour réinitialiser les dimensions est nécessaire.
Conseil 1:
Pour votre exemple, il semble qu'un simple résultat <- if (a == 1) mat else mat2
soit suffisant. Pas besoin de toucher à ifelse
.
Conseil 2:
Il n'est pas impossible de demander à ifelse
de renvoyer une matrice, mais vous devez la protéger par une liste (rappelez-vous qu'une liste est un vecteur) :
ifelse(TRUE, list(mat), list(mat2))
Mais, c'est incommode.