2015-10-21 144 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) 
``` 

免责声明:我没有测试过这一点。