replicate() função em R
A função replicate()
pode ser utilizada para criar simulações, uma vez que pode repetir uma expressão um número específico de vezes. Podemos também controlar o tipo do resultado final como um array ou lista utilizando o parâmetro simplify
.
Um exemplo simples da função replicate()
é mostrado abaixo:
replicate(5,1)
[1] 1 1 1 1 1
Como se pode ver no exemplo acima, 1
é a expressão que é repetida 5 vezes. Note-se que o resultado final aqui é um array. Se adicionarmos o parâmetro simplify
à função (que é True
por defeito) e o definirmos para False
, obteremos uma lista em vez de um array. Por exemplo, o parâmetro False
:
typeof(replicate(5,1,simplify = FALSE))
[1] "list"
Também podemos utilizar o parâmetro replicate()
para simulações mais complexas, como a criação de um array 2-D. O seguinte trecho de código irá mostrar como o fazemos.
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
Neste exemplo, utilizamos a função seq()
para criar uma sequência simples. Cria uma sequência de 1 a 10 com um incremento de 1. replicate()
repete a sequência 5 vezes para gerar um array 2-D.
Também podemos utilizar o laço for()
para tal situação. Por exemplo:
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
Note-se que temos de utilizar um vector numérico como uma declaração extra fora do parêntese; caso contrário, a função replicate()
irá obter o valor NULL
à medida que o valor é despejado como lixo e não é armazenado uma vez que estamos a utilizar o laço for()
.
arr2d <- replicate(5, {
for(i in 1:5){print(i)}} )
print(arr2d)
Resultado:
[[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