Utilisation de la fonction SI dans la R
Je suis en cours d'exécution d'un court if
fonction dans R, mais je reçois le message d'avertissement suivant:
In if ((runif(50, 0, 1) < 0.69)) { : the condition has length > 1 and only the first element will be used`.
Mon rudimentaire saisir de R m'amène à croire que runif
génère un vecteur mais if
donne une valeur unique, donc je pense que c'est le problème. Est-il une simple substitution de si ici?
Aussi, je veux que le produit d'une matrice de combinaison des deux arguments mais je n'étais pas sûr si c'était correct pour mettre 50 dans le rnorm
fonction pour les deux scénarios.
Test <-
if((runif(50, 0, 1)<0.69)) {
rnorm(50, 25, 4)
} else {
rnorm(50, 28, 4.3)
}
Que voulez-vous obtenir à la fin ? Un vecteur de 50 articles ?
OriginalL'auteur YesSure | 2012-08-01
Vous devez vous connecter pour publier un commentaire.
if()
s'attend à ce que est dans les parenthèses pour s'évaluer à une logique de vecteur de longueur 1 (TRUE
ouFALSE
). Si le vecteur est supérieure à 1, alors que l'avertissement dit que seul le premier élément du vecteur est utilisé.Une alternative si
ifelse()
où il est utilisé comme :Pour votre exemple, nous avons:
ou
Est OK comme
ifelse()
génère les deux vecteurs deTRUE_CASE
etFALSE_CASE
avant de faire les comparaisons.Exemple de sortie est:
Une autre façon est de le faire est de générer seulement les valeurs requises
Qui donne évidemment des numéros différents pour les précédents, mais seulement parce que nous avons généré moins de nombres aléatoires. Je doute que cela sera plus efficace que
ifelse()
pour la plupart des problèmes.Gavin Juste pour la clarification complète de ce ifelse est en train de faire: prendre la première des 50 numéros générés de manière aléatoire entre 0 et 1 à l'aide de runif, si cette valeur est inférieure à 0,69$, alors la valeur est générée à partir de la distribution normale (50, 25, 4) et si elle est plus grande, alors la valeur est générée à partir de (50, 28, 4.3). Ensuite, le résultat final est tout simplement un ammalgamation des valeurs dans une liste ou une matrice de 50 valeurs. Mon résumé correct pour l'intervention?
Oui, sauf pour le dernier bit; le résultat est un nombre vecteur de 50 valeurs. J'ai ajouté un exemple de la sortie.
Il est plus efficace de générer des 50 valeurs en une seule fois, pour chaque scénario, que d'avoir de nombreux appels à
rnorm()
déterminé sur la base de la clause. Il y a d'autres façons de le faire.Veuillez ne pas faire des choses comme ça. DONC, ce n'est pas seulement un moyen pour vous d'obtenir des Réponses, mais est également une ressource pour les autres personnes qui pourraient rencontrer des problèmes similaires. Il n'y a rien de mal avec le démarrage d'une nouvelle Question, un lien vers celui-ci pour des détails pertinents. Je vais jeter un oeil à le Modifier par la suite.
OriginalL'auteur Gavin Simpson
Vous avez besoin
any
ouall
, qui convertir un vecteur de partitions logiques contenues dans une seule logique (et, en fait un vecteur de longueur 1).OriginalL'auteur Ari B. Friedman