2012-12-18 2 views
12

R 프로그래밍에 익숙하지 않지만 디렉토리에 대해 여러 파일을 읽고 각각 고유 한 이름을 지정하려고합니다. R (패키지 dpIR) 및 read.tucson 기능으로 Dendrochronology Program Library를 사용하여 파일을 읽었습니다. 특정 패키지를 사용하고 있지만 제 질문은 상당히 일반적이라고 생각합니다.for-loop에서 데이터 프레임의 이름을 바꾸는 방법

루프 내에서 각 개별 파일 이름에 "t"을 연결하여 파일을 만들고 싶습니다. 그래서, 내 디렉토리에 "2503"이라는 파일이 있다면, "t2503"이라는 R에서 데이터 프레임을 만들고 싶습니다. 다음으로 각 데이터 프레임에 r.tucson 함수를 사용하여 데이터를 읽으 려합니다. read-in 데이터를 데이터 프레임에 할당하는 대신 데이터로 연결을 덮어 씁니다. 누군가 내가 놓친 단계를 알아낼 수 있습니까?

#set to appropriate directory 
setwd("C:/work") 

#get a list of files in the directory 
files <- list.files() 
numfiles <- length(files) 

for (i in 1:numfiles) 
{ 
    name<-paste("t",files[i],sep="") 
    name<-read.tucson(files[i],header=NULL) 
} 

답변

24

난 당신이 대답 자신을 준 생각 : 당신이 ?assign를 사용할 필요가 여기에

내가 사용하려고하고있는 코드입니다. 그런

시도 뭔가 :

for (i in 1:5) { 
    assign(paste0("DF", i), data.frame(A=rnorm(10), B=rnorm(10))) 
} 

이 1 ~ 5의 정수를 순환 다섯 data.frames "DF1"을 "DF5"을 만듭니다. 귀하의 예를 들어, 당신은 단지 name는 R의 기본 기능입니다, 그러나,

name<-read.tucson(files[i],header=NULL) 

assign(name, read.tucson(files[i],header=NULL)) 

에주의를 교체해야합니다, 그래서 다른 명명 규칙을 사용하거나 첫 줄을 건너 뛸 것입니다 :

assign(paste("t",files[i],sep=""), read.tucson(files[i],header=NULL)) 

희망하시는 바입니다.

+0

도움 주셔서 감사합니다. 여기에 설명 된대로 "할당"을 사용하여 시도했는데 정확히 필요한 부분을 수행했습니다. 고맙습니다! – user1913921

+5

경고 : 함수에'assign'을 사용하면 최상위 레벨에서 사용하는 것과 다르게 동작합니다. 조만간'env = .GlobalEnv'가 필요합니다. – user1666959

+0

좋은 조언입니다. OP가 더 많은 정보를 원한다면 그는 [다음을] 볼 수 있습니다 (http://stackoverflow.com/questions/9801208/assign-a-function-in-a-loop). –

관련 문제