Cómo asignar valores a variables de nombres dynamics

Hola, bash nombrar variables usando un ciclo for para obtener nombres dynamics para mis variables.

for (i in 1:nX) { paste("X",i, sep="")=datos[,i+1] next } 

use assign como en:

 x <- 1:10 for(i in seq_along(x)){ assign(paste('X', i, sep=''), x[i]) } 

Puede ser una buena idea usar assign cuando hay muchas variables y se buscan con frecuencia. La búsqueda en un entorno es más rápida que en el vector o la lista. Un entorno separado para los objetos de datos es una buena idea.

Otra idea es usar el paquete hash . Realiza la búsqueda tan rápido como los entornos, pero es más cómodo de usar.

 datos <- rnorm(1:10) library(hash) h <- hash(paste("x", 1:10, sep=""), datos) h[["x1"]] 

Aquí hay una comparación de tiempo para 10000 vars que se buscan 10 ^ 5 veces:

 datos <- rnorm(1:10000) lookup <- paste("x", sample.int(length(datos), 100000, replace=TRUE), sep="") # method 1, takes 16s on my machine names(datos) <- paste("x", seq_along(datos), sep="") system.time(for(key in lookup) datos[[key]]) # method 2, takes 1.6s on my machine library(hash) h <- hash(paste("x", seq_along(datos), sep=""), datos) system.time(for(key in lookup) h[[key]]) # method 3, takes 0.2s on my machine e <- new.env() for(i in seq_along(datos)){ assign(paste('x', i, sep=''), datos[i], envir=e) } system.time(for(key in lookup) e[[key]]) 

Sin embargo, la versión vectorizada del método 1 es la más rápida, pero no siempre es aplicable

 # method 4, takes 0.02s names(datos) <- paste("x", seq_along(datos), sep="") system.time(datos[lookup])