Cómo llenar múltiples arreglos en R con un solo bucle
Tengo muchas matrices para llenar en R, cada una de las cuales tiene un nombre diferente en un patrón específico. El problema que tengo es que no puedo encontrar la manera de referirme a los nombres de las matrices como variables, para poder hacer referencia a ellas de manera sistemática dentro de un bucle. Por ejemplo, se crean utilizando este bucle.
for (i in c(40,45,50,55,57,60,65)){
assign(paste0('hdd_',as.character(i),'_365_z'), rep(NA,365))}
Quiero llenar cada una de estas matrices, que tienen nombres como hdd40365z, hdd45365z, etc.
Digamos que quiero llenar cada una de estas matrices usando una función simple como esta:
my_func <- function(value,doy){
return(value * doy/2)} # doy = doy or 1:365
Puedo escribir un bucle para hacer esto:
for (j in c(40,45,50,55,57,60,65)){
for (k in 1:365){
# intentar llenar las matrices un día a la vez
paste0('hdd_',as.character(j),'_365_z')[k] <- my_func(j,k)}}
Obviamente, esto no funciona. He intentado usar lo siguiente para hacer esto, pero no está funcionando. Debe haber una manera de poder hacer algo así, creo, pero no puedo encontrar la combinación de eval, parse, as.name, o algo más para hacerlo. Cualquier ayuda sería genial. Gracias.
eval(parse(text = paste0('hdd_',as.character(j),'_365_z')[k] <- my_func(j,k)))
davy.ai
Una posible solución para referirse a los nombres de los arreglos como variables dentro del bucle es usar la función
get
, la cual permite acceder a los objetos de R por su nombre como cadenas de texto. Aquí tienes un ejemplo de cómo modificar el bucle:En este bucle modificado, primero creamos una variable de tipo cadena
arr_name
que representa el nombre del arreglo dentro del bucle. Luego utilizamos la funciónget
para acceder al arreglo por su nombre y asignarlo a la variablearr
. Dentro del bucle anidado, podemos manipular la variablearr
como si fuera el arreglo real, utilizando la notación de índice[k]
. Finalmente, utilizamos la funciónassign
para guardar el arreglo actualizado de vuelta a su nombre original.Ten en cuenta que generalmente no se recomienda crear un gran número de variables separadas con nombres similares en R. A menudo es mejor utilizar una estructura de datos como una lista o un arreglo para almacenar los datos y acceder a ellos utilizando indexación u otros métodos. Sin embargo, si necesitas trabajar con nombres de variables de manera dinámica en R, las funciones
get
yassign
pueden ser herramientas útiles.