funzione replicate() in R
La funzione replicate()
può essere utilizzata per creare simulazioni poiché può ripetere un’espressione un numero specifico di volte. Possiamo anche controllare il tipo di risultato finale come array o lista usando il parametro semplifica
.
Di seguito è mostrato un semplice esempio della funzione replicate()
:
replicate(5,1)
[1] 1 1 1 1 1
Come puoi vedere nell’esempio sopra, 1
è l’espressione che viene ripetuta 5 volte. Nota che il risultato finale qui è un array. Se aggiungiamo il parametro semplifica
alla funzione (che è True
di default) e lo impostiamo su False
, otterremo una lista invece di un array. Per esempio:
typeof(replicate(5,1,simplify = FALSE))
[1] "list"
Possiamo anche usare replicate()
per simulazioni più complesse, come la creazione di un array 2-D. Il seguente frammento di codice mostrerà come lo facciamo.
replicate(5, seq(1,10,1))
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 2 2 2 2 2
[3,] 3 3 3 3 3
[4,] 4 4 4 4 4
[5,] 5 5 5 5 5
[6,] 6 6 6 6 6
[7,] 7 7 7 7 7
[8,] 8 8 8 8 8
[9,] 9 9 9 9 9
[10,] 10 10 10 10 10
In questo esempio, usiamo la funzione seq()
per creare una semplice sequenza. Crea una sequenza da 1 a 10 con un incremento di 1. replicate()
ripete la sequenza 5 volte per generare un array 2-D.
Possiamo anche usare il bucle for()
per una situazione del genere. Per esempio:
n <- numeric(5)
arr2d <- replicate(5, {
for(i in 1:5){n[i] <- print(i)};n} )
print(arr2d)
[,1] [,2] [,3] [,4] [,5]
[1,] 1 1 1 1 1
[2,] 2 2 2 2 2
[3,] 3 3 3 3 3
[4,] 4 4 4 4 4
[5,] 5 5 5 5 5
Nota che dobbiamo usare un vettore numerico come un’istruzione extra al di fuori della parentesi graffa; altrimenti, la funzione replicate()
otterrà il valore NULL
poiché il valore viene scaricato come spazzatura e non viene memorizzato poiché stiamo usando il bucle for()
.
arr2d <- replicate(5, {
for(i in 1:5){print(i)}} )
print(arr2d)
Produzione:
[[1]]
NULL
[[2]]
NULL
[[3]]
NULL
[[4]]
NULL
[[5]]
NULL
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn