Ako volať funkciu viackrát s meniace sa argumenty a ukladať ich v dátový rámec, v R?

0

Otázka

Im R-začiatočník a chcete spustiť simuláciu, kde som zavolať normálne rozdelenie viackrát s rôznymi hodnotami pre sd.

Napríklad, chcem spustiť rnorm s každým sd jeden čas, kde sd zvyšuje od 1 do M, s každým spustiť. A ja som chcete uložiť výsledky do zoznamu alebo údajov rám. Viem, že to, čo sa snažím dosiahnuť je veľmi jednoduchý krok, ale som zlyhal, snaží sa sám.

rnorm(n=1, znamená=0, sd=1)

rnorm(n=1, znamená=0, sd=2)

... rnorm(n=1, znamená=0, sd=M)

Snažil som sa tento kód s na slučky, ale to nefungovalo.

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

Ak zadám test v konzole, len som si NULL ako výstup. Dúfam, že niekto môže miesto ma správnym smerom.

Vďaka vopred.

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

Ak chcete vygenerovať 1 hodnoty za imôžete skúsiť

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

Výsledok sa uloží do vektora.

Ak chcete vygenerovať niekoľko hodnôt na inapríklad, 5 hodnoty za 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

funguje ako kúzlo, vďaka, veľa @Park :)))
this_is_not_easy
0

Je dobré, R prax na preallocate polia. Na vzorke tomto malom to nebude robiť žiadne funkčné rozdiel, ale váš kód bude viac idiomatický a dopĺňa takto:

> 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

(V kóde vyššie: nemáš return hodnoty z vnútra for slučky, a vy by ste sa prepísať vaše pole s nepotrebné priradenie v každej iterácii.)

2021-11-24 01:42:15

V iných jazykoch

Táto stránka je v iných jazykoch

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