Jak volat funkci, několikrát se mění argumenty a ukládat je v data frame v R?

0

Otázka

Im R-začátečník a chcete spustit simulaci, kde jsem zavolat normální rozdělení vícekrát s různými hodnotami pro sd.

Například, chci spustit rnorm s každým sd jeden čas, kde sd se zvyšuje od 1 do M s každý běh. A chci uložit výsledky v seznamu nebo data frame. Vím, že to, co jsem se snaží dosáhnout, je celkem jednoduchý krok, ale nepodařilo se snažím sama.

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

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

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

Snažil jsem se kód s pro smyčky, ale to nefungovalo.

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

Pokud zadám test v konzole, jen jsem se NULL jako výstup. Doufám, že někdo může místo mě správným směrem.

Díky předem.

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

Pokud chcete vytvářet hodnoty na 1 i, můžete zkusit

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ýsledek bude uložen ve vektoru.

Pokud chcete vytvořit několik hodnot za inapří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 jako kouzlo, díky moc, @Parku :)))
this_is_not_easy
0

To je dobrý R praxe na předem přidělit pole. Na vzorku této malé, to nebude mít žádný funkční rozdíl, ale váš kód by být více idiomatické 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ódu výše: ne return hodnoty z uvnitř for smyčky, a vy byste být přepsání pole s zbytečné úkol v každé iteraci.)

2021-11-24 01:42:15

V jiných jazycích

Tato stránka je v jiných jazycích

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