Xin chào, tôi đang cố gắng đặt tên biến bằng cách sử dụng vòng lặp for để tôi nhận được tên động cho các biến của mình.cách gán giá trị cho các biến tên động trong R
for (i in 1:nX) {
paste("X",i, sep="")=datos[,i+1]
next
}
Xin chào, tôi đang cố gắng đặt tên biến bằng cách sử dụng vòng lặp for để tôi nhận được tên động cho các biến của mình.cách gán giá trị cho các biến tên động trong R
for (i in 1:nX) {
paste("X",i, sep="")=datos[,i+1]
next
}
Nó có thể là một ý tưởng tốt để sử dụng assign
khi có nhiều biến đổi và họ đang nhìn lên thường xuyên. Tìm kiếm trong môi trường nhanh hơn trong vectơ hoặc danh sách. Một môi trường riêng biệt cho các đối tượng dữ liệu là một ý tưởng tốt.
Một ý tưởng khác là sử dụng gói hash
. Nó thực hiện tra cứu nhanh như môi trường, nhưng dễ sử dụng hơn.
datos <- rnorm(1:10)
library(hash)
h <- hash(paste("x", 1:10, sep=""), datos)
h[["x1"]]
Đây là một so sánh thời gian cho 10000 vars được ngẩng đầu lên 10^5 lần:
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]])
Tuy nhiên, phiên bản vectorized của phương pháp 1 là nhanh nhất, nhưng không phải lúc nào cũng áp dụng
# method 4, takes 0.02s
names(datos) <- paste("x", seq_along(datos), sep="")
system.time(datos[lookup])
trong phương pháp 3 x là gì? – agstudy
oops, lỗi đánh máy, sửa lỗi. –
Tại sao bạn lại cố gắng thực hiện điều đó? Sử dụng mảng thay thế. – nico
Xin chào, tôi có một khung dữ liệu với tiêu đề dài nhưng muốn tự động đặt các biến của riêng tôi là X1, X2, v.v. vì vậy tôi có thể hoạt động với riêng chúng – nopeva
Tại sao bạn không thực hiện 'colNames (datos) <- paste ("X", i, sep = "") 'sau đó? Sau đó, bạn có thể truy cập chúng với 'datos $ X1',' datos $ X2' etc – nico