안녕하세요, 내 변수에 대한 동적 이름을 얻을 수 있도록 for 루프를 사용하여 변수의 이름을 지정하려고합니다.동적 이름에 값을 할당하는 방법 R
for (i in 1:nX) {
paste("X",i, sep="")=datos[,i+1]
next
}
안녕하세요, 내 변수에 대한 동적 이름을 얻을 수 있도록 for 루프를 사용하여 변수의 이름을 지정하려고합니다.동적 이름에 값을 할당하는 방법 R
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"]]
가 조회됩니다 만 바르에 대한 타이밍을 비교 한 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) <- paste "X", i, sep = "")'그렇다면? 그럼'datos $ X1','datos $ X2' 등으로 접근 할 수 있습니다. – nico