J'essaie donc d'échantillonner à partir d'une distribution uniforme 1000 fois à chaque fois calculer la moyenne de 20 échantillons aléatoires de ladite distribution uniforme.
Error in summarise_(.data, .dots = compat_as_lazy_dots(...)) : argument ".data" is missing, with no default
4 Réponses :
Vous n'avez pas besoin de dplyr pour cela.
rep<-1000 size<-20 # initialize the dataframe res<-data.frame(rep=NA,mean=NA) for ( i in 1:rep) { samp<-rnorm(size) # here you actually create your sample of 20 numbers from the normal distribution res[i,]$rep<-i #save in the first column the number of the replicate sampling (optional) res[i,]$mean<-mean(samp) # here you calculate the mean of the random sample and store it into the datafra } res
Si ce que vous voulez faire est de générer 1 000 réplications d'un échantillon de la distribution uniforme aléatoire avec 20 observations (et minimum de 0 et maximum de 1), puis prenez la moyenne de chaque échantillon, voici une façon concise de le faire avec Tidyverse code>:
Pourquoi avez-vous besoin dietyverse code>? Bien que vous puissiez le faire uniquement (
nul code>), car vous pouvez obtenir avec
purrr code>.
1) Je préfère utiliser des formules dans la mesure du possible, ils rendent les choses claires et concises, et afaik labapply () code> ne les prend pas en charge. 2) Je viens d'essayer de résoudre le problème avec
labapply () code>, et il n'acceptera pas le vecteur 1: 1000 sans vouloir l'utiliser comme
n code>. Donc, au lieu de cela, je devais utiliser
labayly (rep (20, 1000), runif, min = 0, max = 1) code>, qui me semble moins élégant. 3) Pour obtenir le vecteur de moyens (au lieu d'une liste), je devrais utiliser
sapply () code> et sapply est assez connu pour être incohérent.
Lapply (1: 3, Runif, n = 20, min = -1) Code>.
Lapply CODE> et
SAPPLY code> Par défaut sur le premier argument, mais vous pouvez les faire utiliser le premier argument non spécifié si vous attribuez les autres. Je ne suis pas en désaccord sur les fonctions d'expression, je les finis beaucoup plus concis. La moitié de ma discussion chargait toutes les dizaines de packages de
Tidyverse code> simplement pour deux fonctions. Réalisez que tous ne peuvent pas installer
Tidyverse code> (stratégie ou autres raisons), ou ils veulent essayer cela et doivent s'asseoir à travers une très longue période de compilation juste pour tester deux fonctions. Considérez juste
Bibliothèque (Purrr) Code>.
Diable, réplique (1000, runifsi (20, 1, 2)) code> ou
répliqué (1000, runif (20,1,2), simplifier = false) code> fonctionne comme étant bien.
Les points fers tout autour, je pense juste que Tidyverse code> en vaut la peine pour les débutants, même avec des tracas supplémentaires, car il enseigne facilement des flux de travail facilement. La base R pourrait être plus efficace de calcul, mais je pense que Hadley Wickham fait bon dire que, de nos jours, le goulot d'étranglement de la programmation moyen est rarement trouvé dans le code lui-même et le plus souvent entre le clavier et la chaise. Qu'est-ce que tu penses?
Je comprends et cela pour beaucoup de discussions contentieuses. Je n'ai pas tout de temps installé (bien que j'utilise dplyr code>,
tiard code> quotidiennement), probablement jamais, et j'ai vu beaucoup de débutants qui ne le font pas non plus, non plus. La première fois de compilation de n'importe quel système d'exploitation est décourageant, notre société de gratification immédiate ne traite pas vraiment de cela :-) En bout de ligne, c'est votre choix, merci pour le discours.
J'utilise Purrr code> périodiquement, mais rarement y at-il beaucoup plus utilitaire que l'esthétique (par exemple,
~ code> fonctions) pour moi; Et pendant que je suis tout à fait d'accord dans
Sapply Code> Sapply Code>, je suis assez défensive de mon utilisation de la base
* Appliquer code> Fonctions.
stringr code> est décent, mais je n'ai pas encore trouvé quelque chose qui n'est pas directement effectué avec
gsub code> ou
GREGEXPR code> /
REGMATCHES code>. Peut-être que je manque? ¯ \ _ (ツ) _ / ¯
Construction d'un En outre, réalisez que la prise de nombreux petits échantillons aléatoires est beaucoup plus chère que de ne prendre qu'un seul échantillon plus important. P> < Pré> xxx pré> p> data.frame code> La ligne par ligne est horrible dans la performance (il effectue une copie complète de toutes les lignes chaque fois que vous en ajoutez une ... de sorte que la ligne 900, ajoutant une ligne avoir les 900 lignes d'origine deux fois em> ... cette balance mal).
étant donné que vous avez étiqueté cette question comme une question comme d'autres personnes ont noté, Il est possible de le faire à la base R, aussi. p> Mise à jour forte> par OP Commentaire dplyr code>, vous pouvez utiliser
sommarise_all code>:
Oui, possible d'utiliser A pour la boucle, bien que cela ne soit pas conseillé. Voici une approche: p>
Y a-t-il de toute façon pour ce faire en utilisant la boucle pour la boucle?
Salma, il y a tellement de raisons que quelque chose comme cela devrait pas i> être fait avec un pour code> boucle. Mais, comme c'est souvent le cas, "oui". Une des choses plus difficiles à apprendre lors de l'apprentissage d'un nouveau langage de programmation consiste à ne pas projeter d'efficacité et d'hypothèses d'autres langues sur la langue actuelle. Dans ce cas,
pour code> boucles, bien que non mal, ne soit pas toujours le moyen idiomatique ou même plus efficace de faire des choses dans R. S'il vous plaît ouvrir votre esprit un peu à différentes manières de regarder et de traiter les données.
Vous dites "Distribution normale" dans le corps principal de votre message (deux fois) mais utilisez
runiff code> pour échantillonner dans une distribution uniforme i>. Est-ce une faute de frappe?
Pour un échantillonnage aléatoire à partir de la distribution uniforme (
runifif () code>), vous avez besoin de trois arguments: nombre d'échantillons
n code>, minimum
min code> et maximum > max code>. Vous ne pouvez pas générer des échantillons aléatoires à partir de
runif () code> avec seulement deux arguments.
@Andamb.,
runif (1, -1) code> fonctionne sans erreur.
Je ne savais pas ça, acclamations. Je viens de réaliser
runif (1) code> fonctionne aussi. Mais ceux-ci semblent être des défauts très spécifiques - par exemple.
runif (1000, 20) code> ne fonctionne pas, et même s'il l'a fait (en utilisant la même logique que
runif (1, -1) code> fait), ce ne serait pas faire ce que @salma Abdel-raheem semble vouloir qu'il fasse
Oui Ceci est une faute de frappe, excuses de la distribution uniforme. J'ai mis à jour mon poste pour refléter la question mon prof posté sur les devoirs.