R fonction de répétition jusqu'à ce que condition
Je suis en train de produire un échantillon aléatoire qui exclut certaines "mauvaises données." Je ne sais pas si les données sont "mauvais" jusqu'à ce que après que je l'échantillon. Donc, j'ai besoin de faire un tirage au sort de la population et de la tester. Si les données sont "bonnes", puis le garder. Si les données sont "mauvais", puis tirer au hasard un autre et de le tester. Je voudrais faire ceci jusqu'à ce que ma taille de l'échantillon atteint 25. Ci-dessous est un exemple simplifié de ma tentative d'écrire une fonction qui fait cela. Quelqu'un peut s'il vous plaît dites-moi ce que je suis absent?
df <- data.frame(NAME=c(rep('Frank',10),rep('Mary',10)), SCORE=rnorm(20))
df
random.sample <- function(x) {
x <- df[sample(nrow(df), 1), ]
if (x$SCORE > 0) return(x)
#if (x$SCORE <= 0) run the function again
}
random.sample(df)
êtes-vous familier avec
J'ai pris un coup d'oeil à ?'tout' et ?Le contrôle, mais avait de la difficulté à comprendre comment l'utiliser.
Donc, vous avez à faire après le calcul de dessin? ici, vous avez déjà
Serait-ce encore un échantillon aléatoire de la population d'origine?
c'est en utilisant la même info "SCORE" mentionné ci-dessus, sauf si il y a quelque chose d'autre pas dans l'exemple, il réduit simplement à un simple problème.
?while
?J'ai pris un coup d'oeil à ?'tout' et ?Le contrôle, mais avait de la difficulté à comprendre comment l'utiliser.
Donc, vous avez à faire après le calcul de dessin? ici, vous avez déjà
SCORE
, tout sous-ensemble de ces bonnes et l'échantillon.Serait-ce encore un échantillon aléatoire de la population d'origine?
c'est en utilisant la même info "SCORE" mentionné ci-dessus, sauf si il y a quelque chose d'autre pas dans l'exemple, il réduit simplement à un simple problème.
OriginalL'auteur user1491868 | 2013-12-10
Vous devez vous connecter pour publier un commentaire.
Ici, est un général, l'utilisation d'un
while
boucle:Une alternative est d'utiliser
repeat
(sucre syntaxique pourwhile(TRUE)
) etbreak
:où
break
vous fait quitter lerepeat
bloc. Alternativement, vous pourriez avoirif (x$SCORE > 0) return(x)
pour quitter la fonction directement.OriginalL'auteur flodel
utiliser après votre premier échantillon
OriginalL'auteur Ricardo Saporta
Il me semble que cela devrait fonctionner ainsi:
élégant mais pas aussi efficace qu'une
while
boucle à mon humble avis, car il peut créer une grande pile d'appel.Donc, je devrais accepter de Ricardo réponse comme le meilleur?
Vous êtes essentiellement faire le rejet de l'échantillonnage. Il sera peut-être aussi simple que:
df$SCORE[df$SCORE > 0][ sample(1:(sum(df$SCORE > 0, 1)]
. Je ne suis pas sûr de la façon de les conseiller sur la coche. Le mien était essentiellement un throw-away réponse. Flodel est juste une question d'efficacité. La récursivité n'est pas bien pris en charge dans R.Concernant votre
df$SCORE[df$SCORE > 0][...]
, c'est la même chose j'ai commenté Stephen: OP est de donner une "un exemple simplifié" d'une situation plus complexe où "je ne sais pas si les données sont "mauvais" jusqu'à ce que après je l'échantillon, il". Ainsi, une récursivité ou une boucle while sont sur les seules solutions possibles.OriginalL'auteur 42-
Vous suffit de sélectionner les lignes à l'échantillon directement comme (seulement 5):
c'est sans remplacement, pour bootstrap mis en
replace=T
.juste assez, mais R n'est pas une application en temps réel, ni bon à récursive des appels de fonction, de sorte que si les besoins en matière de données vérifié le test est dans les données et doivent être vectorisées et de mettre entre parenthèses.. comme cela.
Si je garde l'observation est une fonction de l'observation elle-même. Je ne peut pas déterminer s'il convient de conserver l'observation jusqu'à ce que après il a été établi.
si l'obs est vraiment dans un DF, alors vous pouvez faire exactement cela, le sous-ensemble selon vos critères, puis déguster...de toute façon ce n'est pas vraiment important, c'est ça 🙂
Après réflexion, j'ai décidé de sous-ensemble de mes données par les critères de l'échantillonnage. Mais je pense toujours que ce fil est utile lorsqu'il est impossible de créer un sous-ensemble de données avant l'échantillonnage. Merci à tout le monde pour leurs très utiles commentaires et suggestions.
OriginalL'auteur Stephen Henderson