Hola a todos, he leído el archivo de ayuda y algunas preguntas sobre el tema aquí, pero no pude encontrar una respuesta. Creo que es una pregunta muy simple, por lo que probablemente me esté perdiendo algo obvio.
Me gustaría reemplazar una implementación de bucle for tan básica, como
lst <- list()
for (i in 1:10) {
lst[[i]] <- rnorm(n = 3, mean = 5, sd = 3)
}
lst
con purrr::map(), mientras se utilizan todos los argumentos de la función (aquí: rnorm())
Lo siguiente no funciona y devuelve un error de argumento no utilizado.
1:10 %>%
map(rnorm, n = 3, mean = 5, sd = 3)
# Error in .f(.x[[i]], ...) : unused argument (.x[[i]])
Se ejecuta lo siguiente, pero map pasó los argumentos 1:10 a rnorm(sd = .x), por lo que
el resultado no es el esperado.
library(purrr)
1:3 %>%
map(rnorm, n = 3, mean = 5)
#> [[1]]
#> [1] 5.133702 6.456135 5.041438
#>
#> [[2]]
#> [1] 5.722486 4.614772 2.640809
#>
#> [[3]]
#> [1] 1.445749 5.826666 6.096497
¿Existe una manera sencilla de lograrlo?
Agradezco su tiempo y atención.
------------------------------------
Puedes hacer esto con el bucle for y/o el mapa, pero creo que se trata más bien de un problema de replicación o purrr::rerun.
En base R:
replicate(10, rnorm(n = 3, mean = 5, sd = 3), simplify = FALSE)
O usando ronroneo:
purrr::rerun(10, rnorm(n = 3, mean = 5, sd = 3))
------------------------------------
Hay dos maneras de hacer esto. La primera es una función anónima y la segunda es una fórmula. Consulte los ejemplos en ?map() para obtener más información.
Función anónima
library(purrr)
1:10 %>%
map(function(x) rnorm(n = 3, mean = 5, sd = 3))
Fórmula
1:10 %>%
map(~ rnorm(n = 3, mean = 5, sd = 3))