2017-09-01 12 views
1

各行の.pdfドキュメントを生成しようとしていて、その行名でpdfドキュメントを保存しようとしています。カナダ、韓国、ブラジル:すべての行についてpdfドキュメントを生成

canada <- c(100, 80, 100, 100, 20) 
korea <- c(100, 80, 100, 26, 65) 
brazil <- c(100, 90, 100, 30, 30) 
fruit <- rbind(canada, korea, brazil) 
colnames(fruit) <- c("apple", "orange", "banana", "grape", "kiwi") 
fruit 

price <- function(val){ 

    val <- tolower(val) 
    myrow <- fruit[val,] 
    nation <- tools::toTitleCase(val) 
    score.min <- c(myrow)[which.min(c(myrow))] 

    cat(paste0("In ", nation, " cheapest fruit costs ", score.min, " cents.")) 

} 

ので、出力のために、私は3つのPDF文書で終わるでしょう。ここではサンプルデータです。そして、それぞれのpdf文書には、「の中で最も安い果物の価格がxセントです。

これまではrmarkdownを試しましたが、行名で新しいpdfを作成するプロセスを自動化する方法がわかりません。どんな助けでも大歓迎です。

答えて

1

プロットにPDFグラフィックスドライバを使用して単一の行を削除することによってpriceビットを編集する必要がありました。 priceの下には、質問に定義されているとおりです。中間ファイルは生成されず、パッケージは使用されません。これは、あなたの問題がファイルごとに1行しか含まれていないことを考えると、1ページ分のテキストまで十分です。

write_lines_pdf(month.name) 

代わりplot.new(); text(...)の代わりに適切な引数を指定しgplots::textplotの使用を検討:内蔵のベクトルmonth.nameを使用して

write_lines_pdf <- function(x, file = "pdffile", ...) { 
    if (!grepl("\\.pdf$", file)) file <- paste0(file, ".pdf") # append .pdf if not present 
    pdf(file) 
    plot.new() 
    text(x = 0, y = 1, labels = paste(x, collapse = "\n"), adj = c(0, 1), ...) 
    dev.off() 
} 

for(nm in rownames(fruit)) write_lines_pdf(capture.output(price(nm)), nm) 

別の例。

入力文字列がページの端から流れ出る場合は、strwrapを試して、次の行にテキストを折り返すか、cexグラフィックスパラメータを使用してテキストを小さくします。 xが入力テキストの場合:

write_lines_pdf(strwrap(x, 50)) # wrap at column 50 

write_lines_pdf(x, cex = 0.7) # make text smaller 
+0

ありがとうございました。これは私のスクリプトの一部でうまくいきます!私は別の質問があります。長い文章では、新しい行を作成するのではなく、テキストが範囲外になります。単語の綴りが尽きると、Rに新しい行を作成するように指示するためのコマンドは何でしょうか? –

+1

X 'は、あなたの入力文字列が ''テキストを小さくすることが50文字または 'write_lines_pdf(X、CEX = 0.5)にそれをラップする' write_lines_pdf(strwrap(X、50))を使用している場合は、 '。必要に応じて50または0.5を変更します。 'gplots :: textplot'はあなたがそれを使いたい場合に自動的に' cex'を設定します。 –

+0

まだそれを理解しようとしていますが、足場を私に提供してくれてありがとう。私が話すときに私は学んでいます。 –

1

私はcat

price <- function(val){ 

    val <- tolower(val) 
    myrow <- fruit[val,] 
    nation <- tools::toTitleCase(val) 
    score.min <- c(myrow)[which.min(c(myrow))] 

    paste0("In ", nation, " cheapest fruit costs ", score.min, " cents.") 

} 

library(rmarkdown) 

for (x in rownames(fruit)) { 
    rmdfile = paste0(x,".Rmd") 
    cat(price(x), file=rmdfile) 
    render(input = rmdfile, output_format = "pdf_document") 
} 
関連する問題