Come chiamare una funzione più volte con la modifica di argomenti e li memorizza in un frame di dati in R?

0

Domanda

Im a R-principiante e vuoi eseguire una simulazione, dove ho chiamata la distribuzione normale più volte con diversi valori di sd.

Per esempio, voglio correre rnorm con ciascuna scheda sd una volta, dove la sd aumenta da 1 M con ogni esecuzione. E voglio memorizzare i risultati in un elenco o un frame di dati. So che quello che cerco di ottenere è un bel passo, ma non sono riuscito a provarlo da me.

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

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

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

Ho cercato di codice con un ciclo for, ma non ha funzionato.

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

Se inserisco il test la console, ho appena ottenere NULL come output. Spero che qualcuno può mi punto nella giusta direzione.

Grazie in anticipo.

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

Se si desidera generare 1 valori al isi può provare

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

Il risultato viene salvato in un vettore.

Se si desidera generare diversi valori per iper esempio , 5 valori per 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

funziona come un fascino, grazie mille, @Park :)))
this_is_not_easy
0

È bene R pratica di preallocare matrici. Su un campione di questo piccolo non farà alcuna differenza funzionale, ma il tuo codice dovrebbe essere più idiomatiche come segue:

> 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

(Nel codice di cui sopra: non return valori da dentro for loop, e si sarebbe sovrascrittura di un array con l'inutile assegnazione a ogni iterazione.)

2021-11-24 01:42:15

In altre lingue

Questa pagina è in altre lingue

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