Función replicate() en R
La función replicate()
puede utilizarse para crear simulaciones, ya que puede repetir una expresión un número determinado de veces. También podemos controlar el tipo del resultado final como un array o una lista utilizando el parámetro simplify
.
A continuación se muestra un ejemplo sencillo de la función replicate()
:
replicate(5,1)
[1] 1 1 1 1 1
Como puede ver en el ejemplo anterior, 1
es la expresión que se repite 5 veces. Observe que el resultado final es un array. Si añadimos el parámetro simplify
a la función (que es True
por defecto) y lo ponemos a False
, obtendremos una lista en lugar de un array. Por ejemplo:
typeof(replicate(5,1,simplify = FALSE))
[1] "list"
También podemos utilizar la función replicate()
para simulaciones más complejas, como la creación de un array bidimensional. El siguiente fragmento de código mostrará cómo lo hacemos.
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
En este ejemplo, usamos la función seq()
para crear una secuencia simple. Crea una secuencia del 1 al 10 con un incremento de 1. replicate()
repite la secuencia 5 veces para generar un array 2-D.
También podemos utilizar el bucle for()
para esta situación. Por ejemplo:
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
Tenga en cuenta que tenemos que utilizar un vector numérico como una declaración extra fuera de la llave; de lo contrario, la función replicate()
obtendrá el valor NULL
ya que el valor se vierte como basura y no se almacena ya que estamos utilizando el bucle for()
.
arr2d <- replicate(5, {
for(i in 1:5){print(i)}} )
print(arr2d)
Producción :
[[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