Cum de a apela o funcție de mai multe ori cu schimbarea argumente și a le stoca într-un cadru de date în R?

0

Problema

Im o R-incepator si vreau sa fac o simulare, în cazul în care fac apel la distribuția normală de mai multe ori cu diferite valori pentru sd.

De exemplu, eu vreau să fug rnorm cu fiecare sd o singură dată, în cazul în care sd crește de la 1 la M, cu fiecare a alerga. Și vreau pentru a stoca rezultatele într-o listă sau cadru de date. Știu că ceea ce încearcă să realizeze este destul de un pas de bază, dar nu am reușit încearcă-l singur.

rnorm(n=1, adică=0, ds=1)

rnorm(n=1, adică=0, ds=2)

... rnorm(n=1, adică=0, ds=M)

Am încercat să-codul asta cu o buclă, dar nu a mers.

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

Dacă am intra test in consola, sunt NULE de drept ieșire. Sper că cineva poate să-mi punct în direcția cea bună.

Mulțumesc în avans.

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

Dacă doriți pentru a genera 1 valorile pe i, puteți încerca

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

Rezultatul va fi memorat într-un vector.

Dacă doriți pentru a genera mai multe valori pe ide exemplu , pentru 5 valori pe 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

funcționează ca un farmec, multumesc mult, @Parc :)))
this_is_not_easy
0

Este bine R practică de a preallocate tablouri. Pe un eșantion asta mic nu va face nici o diferență funcțională, dar codul ar fi mai idiomatice, după cum urmează:

> 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

(În codul de mai sus: nu return valorile din interiorul for bucle, și ai fi suprascrierea matrice cu inutile misiune în fiecare iterație.)

2021-11-24 01:42:15

În alte limbi

Această pagină este în alte limbi

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