2013-06-18 27 views
12

Döngüleri olan bir R betiğine dayanan knitr kullanarak bir HTML raporu oluşturmaya çalışıyorum. For döngüsü içindeki yorumlardan işaretleme yorumları oluşturmak istiyorum, ancak mümkün olup olmadığından emin değilim. İşte döngü için içinde geri sayım yorumları oluştur

basit bir örnek, bu test.r içinde:,

Ancak RMD bir spin ('test.r'): Sonra

for (i in 1:5) { 
    ## This is a heading for `i` 
    #' This is a comment for `i` 
    print(i)  
} 

i RMD dosyası oluşturmak için dönüşünü kullanmak dosya aşağıdaki gibi görünüyor.

```{r } 
for (i in 1:5) { 
    ## This is a heading for `i` 
    #' This is a comment for `i` 
    print(i)  
} 
``` 

R yığınındaki işaretleme yorumları HTML'ye derlenmez. Mümkün mü?

sayesinde Peter

+0

Rmd'ye dönüştürme işleminden önce bazı R kodlarını çalıştırmak istediğiniz gibi geliyor, anladığım kadarıyla spin (takip ederek) bunu tersine çeviriyor. Bence brew şablonları burada yardımcı olabilir. – baptiste

+1

_Markdown_ yorumlarının yerine _roxygen_ yorumlarını gerçekten kastediyorsunuz. Baptiste'nin bahsettiği gibi, "demlemek" bu tür görevler için daha karmaşıktır (bir döngüden metin oluşturma). –

+0

@Yihui, siz haklısınız. R dosyası rotatif yorumları içeriyor, umarım spin çalıştırdıktan sonra Markdown yorumlarına dönüştürülecektir. – pmichaels

cevap

5

Ben (yeniden) Çalıştırmak istemiyorsanız böyle (ve benzeri) sorunlarında yardımcı olabilir benim pander pakette brew dayalı @Yihui bağımsız knitr bazı özellikleri uygulanmış knit ting'den önce brew. Hızlı demo:

> Pandoc.brew(text = "# Demonstrating a nice loop 
+ <% for (i in 1:5) { %> 
+ ## This is a header for <%=i%> 
+ #' This is a comment for <%=i%> 
+ <% } %>") 

# Demonstrating a nice loop 

## This is a header for _1_ 
#' This is a comment for _1_ 

## This is a header for _2_ 
#' This is a comment for _2_ 

## This is a header for _3_ 
#' This is a comment for _3_ 

## This is a header for _4_ 
#' This is a comment for _4_ 

## This is a header for _5_ 
#' This is a comment for _5_ 

ayrıca Pandoc.brew için (gerçek hayatta sorunlarla text argümanı ile böyle zahmetli kurulumunu kullanmak gerek yoktur) bir dosyayı geçebileceği lütfen unutmayın ve ayrıca örneğin için <% ... %> etiketlerini kullanabileceği Koşullar (bir raporun bir bölümünü gösterme veya gösterme gibi). Ve en önemlisi: <% ... %> (işlenmemiş R komutları) ve <%= ... %> (sonuçlar pander tarafından işlenir) etiketleri arasında büyük bir fark vardır. İkincisi, tüm R nesneler, Pandoc en markdown için dönüşür verdiğini gösterir örn:

> Pandoc.brew(text = "# Demonstrating a conditional 
+ <% for (i in 1:5) { %> 
+ ## This is a header for <%=i%> 
+ <% if (i == 3) { %> 
+ Hey, that's **almost** <%=pi%>, that's between <%=3:4%>! Wanna fit a model to _celebrate_? 
+ <%= lm(mpg ~ hp, mtcars) %> 
+ <% }} %>") 
# Demonstrating a conditional 

## This is a header for _1_ 

## This is a header for _2_ 

## This is a header for _3_ 

Hey, that's **almost** _3.142_, that's between _3_ and _4_! Wanna fit a model to _celebrate_? 

-------------------------------------------------------------- 
    &nbsp;  Estimate Std. Error t value Pr(>|t|) 
----------------- ---------- ------------ --------- ---------- 
    **hp**  -0.06823 0.01012  -6.742 1.788e-07 

**(Intercept)**  30.1  1.634  18.42 6.643e-18 
-------------------------------------------------------------- 

Table: Fitting linear model: mpg ~ hp 

## This is a header for _4_ 

## This is a header for _5_ 
+0

teşekkürler. R kodunda çok fazla açık etiket kullanmaktan kaçınmayı umuyordum, ancak etrafta bir çalışma olduğunu bilmek güzel. – pmichaels

9

Ben size #" sonra belirtebilirsiniz kod yığın seçenek sonuçları = 'asis' ile knitr istediğini elde edebilirsiniz düşünüyorum +" bir R senaryodaki dönmeye geçirilecek (fakat kod az görünüyor '@daroczig önerdiği ilginç demlemek çözümü daha' temiz):

#+ results='asis', echo = FALSE 
for (i in 1:5) { 
    cat("## This is a heading for ", i, "\n") 
    cat("<!-- This is a comment for ", i, "-->\n") 
    print(i)  
} 

bu test.r senaryo ise ve siz dönüşünü yapmak ("test.R"), oluşan md dosyası şu şekilde görünecektir:

## This is a heading for 1 
<!-- This is a comment for 1 --> 
[1] 1 
## This is a heading for 2 
<!-- This is a comment for 2 --> 
[1] 2 
## This is a heading for 3 
<!-- This is a comment for 3 --> 
[1] 3 
## This is a heading for 4 
<!-- This is a comment for 4 --> 
[1] 4 
## This is a heading for 5 
<!-- This is a comment for 5 --> 
[1] 5 
+0

bu, çıktıya yorum yazmamı sağlar, ancak yorumlar Markdown gösterimi kullanılarak biçimlendirilmez. – pmichaels

+0

İşaretleme gösterimi ile biçimlendirilmiş yorumlarla ne kastediyorsunuz? Aradığınız html yorumları mı? Evet ise, aynı şekilde yapabilirsiniz, benim düzenlenmiş örneğimi görebilirsiniz – Gilles

+0

(+1) 2 ila 5 arasındaki başlıklar için yazdırıldıktan sonra ek bir 'cat (' \ n ') 'i içermesi gerekiyordu. başlıklar olarak. – jbaums

4

Benim için çalışan bir çözüm, how to create a loop that includes both a code chunk and text with knitr in R tarafından sağlanır. Her döngü sonunda Hemresults='asis' ve \n önündeki iki boşluk kullanarak.

örnek:

iki olmadan boşluk:

```{r, results='asis'} 
headers <- list("We","are","your","friends") 
for (i in headers){ 
    cat("\n##H ", i, " \n") 
    cat("comment",i) 
} 

Çıktı (html): Gördüğünüz gibi, yorum ve başlıklar birlikte

haberci olsun

enter image description here

Çözüm: iki boşluk olarak: döngü

for (i in headers){ 
    cat("\n##H ", i, "\n") 
    cat("comment",i) 
    cat(" \n")# <--------------------------------- 
} 

enter image description here

not sonunda cat(" \n"): Eğer arsa eğer en sonunda olması gerekir cat(" \n"), hatta çalışmıyor veya döngü içinde bir şey hesaplayın.