2017-01-06 3 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() 
} 
関連する問題