R 如何为动态名称变量赋值

R 如何为动态名称变量赋值,r,R,嗨,我正在尝试使用for循环命名变量,所以我得到了变量的动态名称 for (i in 1:nX) { paste("X",i, sep="")=datos[,i+1] next } 使用分配,如中所示: x <- 1:10 for(i in seq_along(x)){ assign(paste('X', i, sep=''), x[i]) } x当变量较多且经常查找时,最好使用assign。在环境中查找比在向量或列表中查找更快。为数据对象创建一个单独的环境是一个

嗨,我正在尝试使用for循环命名变量,所以我得到了变量的动态名称

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

使用
分配
,如中所示:

x <- 1:10

for(i in seq_along(x)){
  assign(paste('X', i, sep=''), x[i])
}

x当变量较多且经常查找时,最好使用
assign
。在环境中查找比在向量或列表中查找更快。为数据对象创建一个单独的环境是一个好主意

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

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

datos你为什么要这么做?使用数组代替。嗨,我有一个长标题的数据帧,但我想自动设置我自己的变量为X1、X2等,这样我就可以单独使用它们了。为什么你不直接使用
colNames(datos)呢?谢谢nico,这是一个很好的解决方案!这是faq 7.21,答案中最重要的部分是最后一部分,它说不要这样做,使用列表或环境。嗨,大卫,你为什么认为这是个坏主意?@user1228124有经验的R程序员通常建议不要使用
assign
,除非你绝对被迫这样做。在这种情况下,nico建议使用
colnamesplus one,这节省了我的时间
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]])
# method 4, takes 0.02s
names(datos) <- paste("x", seq_along(datos), sep="")
system.time(datos[lookup])