Comme la question se pose, y a-t-il une séquence de contrôle dans R similaire à l' opérateur ternaire de C ? Si oui, comment l'utilisez-vous? Merci!
175
Comme la question se pose, y a-t-il une séquence de contrôle dans R similaire à l' opérateur ternaire de C ? Si oui, comment l'utilisez-vous? Merci!
ifelse
, ou simplement une forme plus compacte?if (x>1) y=2 else y=3
. Ecrirey=
une fois a un certain attrait.Réponses:
De même que
if
function inR
et renvoie la dernière évaluation, if-else est équivalent à?:
.La puissance de R est la vectorisation. La vectorisation de l'opérateur ternaire est
ifelse
:Je plaisante, vous pouvez définir le style c
?:
:ici, vous n'avez pas besoin de vous soucier des parenthèses:
mais vous avez besoin de crochets pour l'affectation :(
Enfin, vous pouvez faire de manière très similaire avec c:
Vous pouvez vous débarrasser des crochets:
Ce ne sont pas pour un usage quotidien, mais peut-être bon pour apprendre certains éléments internes du langage R.
la source
Comme tout le monde l'a dit, utilisez
ifelse
, mais vous pouvez définir des opérateurs de sorte que vous ayez presque la syntaxe d'opérateur ternaire.Cela fonctionne réellement si vous définissez les opérateurs sans les
%
signes, donc vous pourriez avoir(Cela fonctionne car la priorité de
:
est inférieure à?
.)Malheureusement, cela rompt alors les opérateurs d'aide et de séquence existants.
la source
Juste comme une farce, vous pouvez redéfinir l'
?
opérateur pour (presque) travailler comme l'opérateur ternaire (CECI EST UNE MAUVAISE IDÉE):... Mais vous devez mettre les expressions entre parenthèses car la priorité par défaut n'est pas comme en C.
N'oubliez pas de restaurer l'ancienne fonction d'aide lorsque vous avez terminé de jouer:
la source
Je voudrais jeter un oeil à la
ifelse
commande. Je l'appellerais encore mieux car il est également vectorisé. Un exemple utilisant le jeu de données cars:la source
ifelse
avec votre exemple? ;)Votre lien pointe vers une
if
déclaration.Si votre variable d'entrée est un vecteur, cela
ifelse
pourrait être plus approprié:Pour accéder à la page d'aide de
if
, vous devez intégrer lesif
backticks:La page d'aide pour
ifelse
est à:la source
print(if (x<2) "Less than" else "Greater than")
Cela n'existe pas explicitement, mais vous pouvez le faire:
ou
La différence entre les deux est que
condition1
doit être un vecteur logique de longueur 1, tandis quecondition2
doit être un vecteur logique de la même longueur quex
,y
, etz
. Le premier retournera soity
ouz
(l'objet entier), tandis que le second renverra l'élément correspondant dey
(condition2==TRUE
) ouz
(condition2==FALSE
).Notez également que
ifelse
sera plus lent queif
/else
sicondition
,y
etz
sont tous les vecteurs de longueur 1.la source
if
fonctionne comme un ifelse non visualisé s'il est utilisé de la manière suivante:L'avantage d'utiliser ceci par rapport à ifelse est lorsque la vectorisation est gênante (c'est-à-dire que j'ai des choses scalaires booléennes et liste / vecteur en conséquence)
la source