您好我正在嘗試使用for循環來命名變量,以便爲變量獲取動態名稱。如何爲R中的動態變量名賦值0
for (i in 1:nX) {
paste("X",i, sep="")=datos[,i+1]
next
}
您好我正在嘗試使用for循環來命名變量,以便爲變量獲取動態名稱。如何爲R中的動態變量名賦值0
for (i in 1:nX) {
paste("X",i, sep="")=datos[,i+1]
next
}
它可以是一個好主意,用assign
當有許多變量,它們經常擡起頭來。在環境中查找比在矢量或列表中查找更快。數據對象的單獨環境是一個好主意。
另一個想法是使用hash
包。它執行的查找速度與環境一樣快,但使用起來更舒適。
datos <- rnorm(1:10)
library(hash)
h <- hash(paste("x", 1:10, sep=""), datos)
h[["x1"]]
這裏是被查找10000個VARS的時序對比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的矢量化版本是最快的,但並不總是適用
# method 4, takes 0.02s
names(datos) <- paste("x", seq_along(datos), sep="")
system.time(datos[lookup])
在方法3什麼是x? – agstudy
哎呀,一個錯字,修復它。 –
你爲什麼要這麼做?改用數組。 – nico
嗨,我有一個長頭數據框,但想自動設置我自己的變量作爲X1,X2等,所以我可以與他們單獨操作 – nopeva
爲什麼不只是'colNames(datos)< - 粘貼( 「X」,我,sep =「」)'那麼?然後你可以用'datos $ X1','datos $ X2'等等來訪問它們。 – nico