Comment appeler une fonction à plusieurs reprises avec l'évolution des arguments et de les stocker dans un bloc de données dans R?

0

La question

Im un R-débutant et que vous voulez exécuter une simulation, où j'appelle la loi de distribution normale plusieurs fois avec des valeurs différentes pour la sd.

Par exemple, je veux courir rnorm avec chaque sd un temps, où la sd augmente à partir de 1 M à chaque exécution. Et je veux stocker les résultats dans une liste ou d'un bloc de données. Je sais que ce que je cherche à atteindre est une jolie étape de base, mais je l'ai pas essayer par moi-même.

rnorm(n=1, mean=0, sd=1)

rnorm(n=1, mean=0, sd=2)

... rnorm(n=1, mean=0, sd=M)

J'ai essayé ce code avec une boucle for, mais cela n'a pas fonctionné.

test <- for(i in 1:10){
  test <- rnorm(n=1, mean=0, sd=i)
  return(test)
}

Si j'entre un test dans la console, je viens d'obtenir la valeur NULL comme sortie. J'espère que quelqu'un peut me pointer dans la bonne direction.

Merci à l'avance.

function r statistics
2021-11-24 00:50:10
2
0

Si vous voulez générer des valeurs 1 par i, vous pouvez essayer

res <- c()
for(i in 1:10){
  res <- c(res,rnorm(n=1, mean=0, sd=i))
}
res
[1]  1.3586796 -0.2055755  1.1630148 -0.2152202 -6.8852978 -2.4899674 -2.7600297 -0.4745072  9.9002283  7.6317575

Le résultat sera enregistré dans un vecteur.

Si vous souhaitez générer plusieurs valeurs par ipar exemple , 5 valeurs par i.

res <- matrix(0, nrow = 5, ncol = 10)
for(i in 1:10){
  res[,i] <- rnorm(n=5, mean=0, sd=i)
}
res
           [,1]       [,2]      [,3]       [,4]       [,5]       [,6]      [,7]         [,8]       [,9]     [,10]
[1,] -0.1645236 -1.4149903  1.194318  7.9215996 12.0080888   1.132754  3.328567  2.331569884  -5.118019  3.329504
[2,] -0.2533617  0.7291639 -1.836079 -1.4688859 -0.1962000 -10.829752 -4.969625 -3.546334986  -1.216608 10.630998
[3,]  0.6969634  1.5370658  1.023359 -4.1765385  3.4486968   8.793329  4.275084  0.008842813  10.602783 -3.041839
[4,]  0.5566632 -0.2246924 -3.388089  2.2788785  0.1400108   0.919520 -6.538683  0.594730593 -13.712101  3.700188
[5,] -0.6887557  1.7622155  4.299071 -0.5402184 -3.7163660  13.035670 -8.775434 -4.716167570   5.345516  2.670988
2021-11-24 00:57:51

fonctionne comme un charme, merci beaucoup, @Park :)))
this_is_not_easy
0

Il est bon de R pratique de préallouer tableaux. Sur un échantillon de cette petite elle ne fera aucune différence fonctionnelle, mais votre code serait plus idiomatiques comme suit:

> k <- 10
> test <- rep(NA, k)
> for(i in 1:k){
+     test[i] <- rnorm(n=1, mean=0, sd=i)
+ }
> test
 [1]  -1.0083914   0.4404118   3.0581583  -8.2564404   3.7986092 -10.9064909  -6.5173390  -3.8936812
 [9]   5.2027044 -11.1803524

(Dans le code ci-dessus: vous n'avez pas return les valeurs de l'intérieur for les boucles, et vous serez d'écraser votre tableau avec les inutiles affectation à chaque itération.)

2021-11-24 01:42:15

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................