2015-05-24 13 views
7

.Rmd dosyasından oluşturulan PDF raporlarını otomatik olarak kaydetmeme izin veren bir döngü oluşturmak istiyorum. Örneğin, bir "ID" değişkeninin 10 satırı varsa, R'nin otomatik olarak 10 raporu otomatik olarak belirli bir dizine kaydetmesini isterim. Bu raporlar seçilen ID'ye göre değişecektir.R Knitr PDF: PDF raporlarını (.Rmd'den oluşturulan) otomatik olarak bir döngüde kaydetmek için bir olasılık var mı?

Önceki bir yazı (Using loops with knitr to produce multiple pdf reports... need a little help to get me over the hump), .Rnw dosyalarından oluşturulan çoklu pdf raporlarının oluşturulmasını ele almıştır.

#Data 

```{r, include=FALSE} 
set.seed(500) 
Score <- rnorm(40, 100, 15) 
Criteria1<-rnorm(40, 10, 5) 
Criteria2<-rnorm(40, 20, 5) 
ID <- sample(1:1000,8,replace=T) 
df <- data.frame(ID,Score,Criteria1,Criteria2) 

#instead of manually choosing the ID: 

subgroup<- subset(df, ID==1) 

# I would like to subset the Data through a loop. My approach was like like this: 

for (id in unique(df$ID)){ 
subgroup<- df[df$ID == id,]} 

``` 

```{r, echo=FALSE} 
#Report Analysis 

summary(subgroup) 
``` 
#Here will be some text about the summary. 



# At the end the goal is to produce automatic pdf reports with the ID name as a filename: 

library("rmarkdown") 
render("Automated_Report.rmd",output_file = paste('report.', id, '.pdf', sep='')) 
+0

Bir döngüye ihtiyacınız var, iki değil. Kodunuzun ayarlandığı şekilde, tüm alt gruplarınız arasında geçiş yaparsınız ve ardından işiniz bittiğinde bir grup PDF oluşturursunuz. Bunları birleştirmeniz gerekir: bir alt grup seçin ve aynı döngüye göre ona dayalı bir rapor oluşturun. Daha fazla yardıma ihtiyacınız varsa, "çalışmıyor gibi görünüyor" dan çok daha spesifik olmanız ve muhtemelen tekrarlanabilir bir örnek oluşturmanız gerekir. – Gregor

+0

Ayrıca 'knit_expand' veya' brew' paketine de bakabilirsiniz. – Gregor

+0

Ayrıca, altlık için yalnızca bir döngü ile denedim. Ama bu da işe yaramadı. Ben sadece bir raporda her ID için özeti yapıştırır ve ayrıca rittdown paketinden render() işlevi ile knit2pdf() işlevini değiştirdi basit bir çoğaltılabilir bir örnek sağladım. @ Gregor – user3491036

cevap

8

seni örnek uyarlanması: Ben şöyle bir yaklaşım uygulamak çalıştı

tek bir .rmd "şablon" dosyasını gerekir. Böyle bir şey olabilir, template.rmd olarak kaydedin. Sonra

This is a subgroup report. 

```{r, echo=FALSE} 
#Report Analysis 
summary(subgroup) 
``` 

, veri alt kümeleri aracılığıyla istediğiniz verileri, döngü yükleyecektir bir R komut dosyasına gerek ve her alt kümesi için

  1. şablonu içinde kullanılan subgroup nesnesi tanımlayın
  2. hale Bu ayrı komut yılında

Yani istenilen çıkışa şablon,:

# load data 
set.seed(500) 
Score <- rnorm(40, 100, 15) 
Criteria1<-rnorm(40, 10, 5) 
Criteria2<-rnorm(40, 20, 5) 
ID <- sample(1:1000,8,replace=T) 
df <- data.frame(ID,Score,Criteria1,Criteria2) 

library("rmarkdown") 

# in a single for loop 
# 1. define subgroup 
# 2. render output 
for (id in unique(df$ID)){ 
    subgroup <- df[df$ID == id,] 
    render("template.rmd",output_file = paste0('report.', id, '.html'))  
} 

Bu, çalışma dizinimdeki 8 html dosyası oluşturdu ve bunların her biri verilerin farklı altkümelerinin bir özetini verdi.

Not: çalışmaz, RStudio'nun içindeki "örgü" düğmesini tıklatırsanız, bu R kodunu ayrı bir R oturumunda çalıştırır. Ancak, konsoldan açıkça çalıştırdığınızda, render (veya knit2pdf) rmd dosyasındaki R kodunun hala genel ortama erişimi vardır.

Bu hedefe ulaşmak için farklı bir seçenek brew paketini kullanmak olacaktır.

+0

Teşekkür Çalıştı! Sanırım .html'yi seçtiniz çünkü .pdf, özetin pandoc çıktısına dayalı bir hata oluşturdu. Bu zaten sadece basit bir örnek olduğu için sonunda bir fark yaratmadı. – user3491036

+0

Evet, bunun genel prensipleri çalışmak için iyi olacağını düşündüm ve içeriğin detayları kolayca takip edecekti. – Gregor

İlgili konular