3 votes

Retournez une matrice avec `ifelse`

J'ai deux matrices :

mat <- matrix(1:6, 2, 3)
mat2 <- matrix(1:2, 2, 3)

et un paramètre

a <- 1

en utilisant ifelse, est-il possible de retourner une matrice lorsque a a une certaine valeur? Le code que j'utilise ne fonctionne pas. Par exemple :

mat.new <- ifelse(a == 1, mat, mat2)

8voto

李哲源 Points 45737

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X