2016-09-29 3 views
0

문자 벡터를 반복하고 각 값에 대해 약간 다른 쿼리를 실행하려고합니다. 그런 다음 결과를 캡처하여 로컬로 rdata 파일로 저장하려고합니다. 저장되면 R 개체를 삭제할 수 있습니다.루프에서 저장된 객체의 이름을 동적으로 지정합니다.

나는 내가 sapply/적용 할이 일을해야하며, 그 작업을 수행하는 방법에 대한 팁을 주셔서 감사 것이라고 알고 ... 그러나

, 내 주요 문제는 그 RDATA 파일은 이름을 잘 저장하면서 나는 R에 다시로드 할 때 (예를 들어, "TABLE1", "TABLE2")를 원했을 것입니다. 모든 이름이 "thisname"인 객체 이름을 가지고 있습니다. "1 번 테이블"). 나는이 일을 너무 오랫동안 시도하고있다.

누구나 제안 사항이 있으면 알려 주시면 감사하겠습니다.

tables = c('TABLE1','TABLE2') 
for (i in 1:length(tables)){ 
     thisname=paste0(tables[i]) 
     data= sqlQuery(oracle.channel, paste("select * from",table_renamer(tables[i]),"WHERE ROWNUM<10;")) 
     assign(thisname,data) 
     save(thisname, file=file.path(paste0(tables[i],".RData"))) 
     rm(thisname) 
     rm(thisdf) 
     } 

답변

0

사용 saveRDS(thing, file="file.rds"). ,

foo = readRDS("file.rds") 

아니면 이미으로 .rdata 파일에 물건을 잔뜩 저장 한 경우에로드 :

이 단지 당신이 어떤 이름을 할당하여 읽을 수 있도록 당신이 좋아하는, 개체의 값을 저장 새로운 환경과 가치를, 같은 : 단정하는 기능에

e = new.env() 
load("foo.RData", environment=e) 
foo = e$thisname 

랩이.

+0

감사를 배웠 :

#make a custom function to do the data handling, including saving saveit <- function(x, oracle.channel, data.dir){ assign(x,sqlQuery(oracle.channel, paste("select * from",table_renamer(x),"WHERE ROWNUM<10;"))) save(list=x, file=file.path(data.dir, paste0(x,".RData"))) } #sapply to make it happen sapply(tables, simplify=TRUE, saveit, oracle.channel, data.dir) 

진짜 트릭은 목록을 저장했다. 내 패키지는 데이터가 data()를 통해로드 될 것을 요구하기 때문에 saveRDS()를 사용할 수 없습니다. 이는 데이터를 .RData 및 rda 파일로 제한합니다. 결국 나는 스택 오버플로에 대한 해결책을 발견하고 내 질문을 복제본으로 표시했습니다. 누군가가이 게시물을 발견 할 경우를 대비하여 최종 해결책을 게시 할 것입니다. – gruvn

0

내 최종 솔루션은 좋은 인 sapply 사용 했 : save(list=x, ...), 내가 찾고에 대한 here

관련 문제