【问题标题】:Using an R script to create a highly repetitive Rmarkdown script使用 R 脚本创建高度重复的 Rmarkdown 脚本
【发布时间】:2019-08-05 17:52:30
【问题描述】:

我定期分析调查结果并喜欢使用 Rmarkdown,以便我可以对结果进行漂亮的 HTML 输出。

调查可能有很多问题(比如 40 个),因此创建 40 个代码块,以及高度重复的代码和标题可能会很烦人。我认为,我可以通过 R 中的循环轻松地做到这一点。但是,我只是坚持如何结合这两个过程!

这很接近—— how to create a loop that includes both a code chunk and text with knitr in R

但最终,它只是一个循环,而且不是很灵活。因此,我无法在问题 22(或其他)中添加数字。

### Question 1
#### `r key$Question_Text[key$Question=="Q1"][1]`

```{r chunk1}
quest <- "Q1"
# code for question 1
```

### Question 2
#### `r key$Question_Text[key$Question=="Q2"][1]`

```{r chunk2}
quest <- "Q2"
# Identical code for question 2
```

....and so on....

### Question 35
#### `r key$Question_Text[key$Question=="Q35"][1]`

```{r chunk35}
quest <- "Q35"
# Identical code for question 35
```

因为有时,一个问题有一个特殊类型的图形或调整,我希望输出是我可以粘贴到 RMD 并在那里进行所有更改的东西。我只是想尽可能多地跳过...通过使所有无聊的相同步骤完全自动化。

【问题讨论】:

  • 我认为您可以使用knit_expand function 做到这一点。
  • 我想不出一种方法来使用 knit_expand,而不必再次输入所有内容,但也许我只是缺乏创造力。

标签: r r-markdown repeat


【解决方案1】:

制作我可以在循环中引用的字符串

question<-paste(rep("Question",20), 1:20, sep=" ")

qnum<-paste0(rep("Q",20), 1:20, sep="")

quest_text_code <- paste0("#### ","`r key$Question_Text[key$Question==", "\"",qnum[i],'"' ,"][1]`")

chunk <- paste(rep("chunk",20), 1:20, sep="")

使用 sink() 发送到文本文件

sink("outfile.txt")

循环粘贴并输出到接收器中

for(i in 1:20){  cat(paste("###", question[i], "\n", "\n", 
              quest_text_code,"\n", "\n",
              "```", "{r ", chunk[i], "}", "\n","\n", 
              "function.dat(", qnum[i], ")","\n", "\n", 
             "function.dat.nr(", qnum[i], ")","\n", "\n", 
              "```", "\n", "\n"))
}

dev.off() # ends sink

之后,我能够复制到 RMD 文件并在一些故障(额外的前导空格)上使用查找和替换我也无法使用粘贴添加“”标记。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-12
    • 2012-04-24
    • 2015-05-26
    • 2019-01-20
    相关资源
    最近更新 更多