Witam Próbuję nazwać zmienne za pomocą pętli for, więc otrzymuję dynamiczne nazwy dla moich zmiennych.jak przypisać wartości do dynamicznych nazw zmiennych w R
for (i in 1:nX) {
paste("X",i, sep="")=datos[,i+1]
next
}
Witam Próbuję nazwać zmienne za pomocą pętli for, więc otrzymuję dynamiczne nazwy dla moich zmiennych.jak przypisać wartości do dynamicznych nazw zmiennych w R
for (i in 1:nX) {
paste("X",i, sep="")=datos[,i+1]
next
}
To może być dobry pomysł, aby użyć assign
gdy istnieje wiele zmiennych i ich wzrok często. Wyszukiwanie w środowisku jest szybsze niż w wektorze lub na liście. Osobnym środowiskiem dla obiektów danych jest dobry pomysł.
Innym pomysłem jest użycie pakietu hash
. Wykonuje wyszukiwanie tak szybko, jak środowiska, ale jest wygodniejszy w użyciu.
datos <- rnorm(1:10)
library(hash)
h <- hash(paste("x", 1:10, sep=""), datos)
h[["x1"]]
Powyżej znajduje się Porównanie terminy 10000 Vars, które są wzrok 10^5 razy:
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]])
Jednak vectorized wersja metody 1 jest najszybszy, ale nie zawsze jest stosowane
# method 4, takes 0.02s
names(datos) <- paste("x", seq_along(datos), sep="")
system.time(datos[lookup])
w metodzie 3, co to jest x? – agstudy
Ups, literówka, poprawiono. –
Dlaczego próbujesz to zrobić? Zamiast tego użyj tablicy. – nico
Witam, mam ramkę danych z długimi nagłówkami, ale chciałbym automatycznie ustawić własne zmienne jako X1, X2, itd., Dzięki czemu mogę obsługiwać je indywidualnie – nopeva
Dlaczego po prostu nie wykonasz 'colNames (datos) <- paste ("X", i, sep = "") ", a następnie? Następnie możesz uzyskać do nich dostęp za pomocą 'datos $ X1',' datos $ X2' itd. – nico