如何为R中的dynamic名称variables赋值

您好我试图命名variables使用for循环,所以我得到我的variables的dynamic名称。

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

使用assign如下:

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

当有许多variables时,使用assign可能是一个好主意,并且经常被查询。 在环境中查找比在vector或列表中更快。 数据对象的单独环境是一个好主意。

另一个想法是使用hash包。 它执行查找与环境一样快,但使用起来更舒适。

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

这是一个10万5千倍的查找时间比较:

 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]]) 

然而,方法1的vector化版本是最快的,但并不总是适用的

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