2017-01-06 1 views
0

R의 목록에서 생성 된 일련의 표와 그래프가 있습니다. 목록의 각 반복마다 pdf를 만들고 싶습니다. 나는 단순히 함수 내에서 pdf()를 사용해 보았지만 너무 많은 그래픽 장치가 열려 있다는 오류를 얻었습니다. ? 나는 목록 요소 이름에 따라이 작업을 수행 (및 파일 이름을 어떻게함수에서 pdf를 인쇄하는 방법

을 지금까지 나는 시도했다 : 나는 꽤에 목록 요소의 이름을 연결하는 방법 운동 캔트

ReportPDF<-function(x){ 
pdf(paste(name(x),"~\\Myfile.pdf") 
tb<-table(x$acolumn) 
print(fb) 
} 

lapply(mylist,ReportPDF) 

파일 이름 및 lapply에서 pdf를 만드는 가장 좋은 방법인지 확신 할 수 없습니다.

+0

끝에 함수에'dev.off()'를 추가해보십시오. – ytk

+0

@ytk. 내가 그거 했어. –

+0

비록 같은 for 루프를 사용하고'pdf'와'dev.off'에있는 루프를 감싸서 하나의 파일을 얻거나 루프 안에 넣어 여러 개의 파일을 얻을 수 있습니다. – lmo

답변

4

일부를 정리할 수 있습니까? ReportPDF()로 전달할 개체의 구체적인 예를 들어주세요. 열을 선택하는 데이터 프레임 인 것처럼 보이기보다는 플롯 개체를 기대합니다. 재미 예를 들어 몇 가지 오류가 너무, 당신이 이것을 의미 했습니까?

ReportPDF<-function(x){ 
pdf(paste(names(x),"Myfile.pdf")) 
tb<-table(x$acolumn) 
print(tb) 
dev.off() 
} 

lapply(mylist,ReportPDF) 

나는 다른 정보를 얻을 때 이전과 비슷한 것을 한 것으로 믿고이 대답을 업데이트 할 수 있다고 생각합니다.

다음은 개체에 대한 몇 가지 가정 사항입니다. lmo가 제안하는대로 루프는 for을 사용하지만 더 우아한 방법이 있어야한다고 생각합니다. 나는 for 루프를 사용하고 있습니다. lapply는 목록의 각 요소 내에서 객체를 전달하기 때문에 목록의 요소 이름에 대한 참조가 없으므로 파일을 개별적으로 이름 지정해야합니다. 예제에서 코드를 깨는 부분의 일부인 mylist[i]mylist[[i]]을 호출하는 것과 다른 점에 유의하십시오. 코드에서 names(x)은 mylist 안에있는 x의 이름이 아니라 x 내의 열 이름을 얻습니다. 이는 원하는 것입니다.

x <- data.frame(acolumn = rnorm(10)) 
q<- data.frame(acolumn = rnorm(10)) 

mylist <- list(a = x,b = q) 


for(i in seq_along(mylist)){ 
    filename <- paste(names(mylist[i]),'-myFile.pdf', sep = "") 
    pdf(filename) 
    plot(myList[[i]]$acolumn) 
    dev.off() 
} 
관련 문제