2015-10-21 89 views
26

我有一個這樣的R降價文件:循環中的R降價

The following graph shows a histogram of variable x: 

```{r} 
hist(x) 
``` 

我想介紹一個循環,這樣我就可以做同樣的事情了多個變量。這樣的假設是這樣的:

for i in length(somelist) { 
    output paste("The following graph shows a histogram of somelist[[" , i, "]]") 
    ```{r} 
    hist(somelist[[i]]) 
    ``` 

這是可能的嗎?

PS:越大計劃是創建一個程序,將過去的數據幀,並自動對每一列產生適當的摘要(例如直方圖,表,箱形圖,等等)。然後該程序可以用來自動生成一個降價文檔,其中包含您在查看第一個數據的數據時將執行的探索性分析。

+0

您可以在一個塊內生成多個圖。你能解釋一下你的解決方案的基本原理是什麼,而不是在產生多個圖的一個塊內部有一個循環? – akhmed

+1

我來這裏是爲了同一個問題。我的理由是製作幾個版本的RMarkdown報告。這些報告將是給我的學生一個練習的答案,但由於每個人都使用不同的數據,我想爲每個學生個性化報告。接受的答案可能很有用,但最好在循環中實際使用markdown,使用標題,公式,格式等降級功能。 – Pere

回答

26

這可能是你想要的嗎?

--- 
title: "Untitled" 
author: "Author" 
output: html_document 
--- 


```{r, results='asis'} 
for (i in 1:2){ 
cat('\n') 
cat("#This is a heading for ", i, "\n") 
hist(cars[,i]) 
cat('\n') 
} 
``` 

這個答案是或多或少從here被盜。

+0

從另一個答案中我不清楚(至少對我而言),這可以通過降價來完成,而無需先將R文件縫合在一起。很高興看到我現在只能堅持RMarkdown。 –

+0

對於我來說,這兩個標題出現在兩張圖之前。 – Nova

+0

我使用當前的軟件包版本重新運行此代碼。對我來說它仍然有效。您是否以某種方式更改了示例代碼? – Alex

1

如前所述,任何循環都需要位於代碼塊中。給直方圖一個標題可能會更容易,而不是爲每個標題添加一行文本作爲標題。

```{r} 
    for i in length(somelist) { 
     title <- paste("The following graph shows a histogram of somelist[[" , i, "]]") 
     hist(somelist[[i]], main=title) 
    } 
``` 

不過,如果你想創建多個報告,然後檢查了this thread.

其中也有this example.
的鏈接似乎當使呼叫從一個紙條內進行,環境變量可以傳遞給Rmd文件。

因此,一個替代方法可能是讓你的[R腳本:

for i in length(somelist) { 
    rmarkdown::render('./hist_.Rmd', # file 2 
       output_file = paste("hist", i, ".html", sep=''), 
       output_dir = './outputs/') 
} 

然後你RMD塊看起來像:

```{r} 
    hist(i) 
``` 

免責聲明:我沒有測試過這一點。