R 将连续控制台输出合并到一个块中
在RStudio中编织R标记时,我希望将一个块中的所有控制台输出放在一个代码块中。如何做到这一点 作为一种解决方法,我编写了两个相同代码的代码块,并在第一个块上设置R 将连续控制台输出合并到一个块中,r,knitr,rstudio,R,Knitr,Rstudio,在RStudio中编织R标记时,我希望将一个块中的所有控制台输出放在一个代码块中。如何做到这一点 作为一种解决方法,我编写了两个相同代码的代码块,并在第一个块上设置eval=FALSE,在第二个块上设置echo=FALSE `{r向量演示2,eval=FALSE} #检查向量的类和结构 类别(nums) 类(字符) str(nums) str(字符) ``` ```{r向量Demo 2b,echo=FALSE} #检查向量的类和结构 类别(nums) 类(字符) str(nums) str(字符
eval=FALSE
,在第二个块上设置echo=FALSE
`{r向量演示2,eval=FALSE}
#检查向量的类和结构
类别(nums)
类(字符)
str(nums)
str(字符)
```
```{r向量Demo 2b,echo=FALSE}
#检查向量的类和结构
类别(nums)
类(字符)
str(nums)
str(字符)
```
但是,这会产生以下输出:
# examine the class and structure of vectors
class(nums)
class(char)
str(nums)
str(char)
# examine the class and structure of vectors
class(nums)
class(char)
str(nums)
str(char)
我希望第二个块(即向量Demo 2b)的输出像第一个块(即向量Demo 2)一样放在一个代码块中。这是我希望获得结果的示例输出: 赏金猎人须知:
更好的是,我会很感激有一种方法,让一个代码块先打印输入代码,然后打印输出代码。这样我就可以避免重复和可能出现的不一致。以下是解决您问题的方法。有两件事要做:
## Test
```{r echo = F, cache = F}
knitr::knit_hooks$set(document = function(x){
gsub("```\n*```r*\n*", "", x)
})
```
```{r VectoDemo, results = 'hold'}
nums = 1:5
char = LETTERS[1:5]
# examine the class and structure of vectors
class(nums)
class(char)
str(nums)
str(char)
```
我在这里做了两件事
results='hold'
设置为在打印源文件后“hold”打印输出@Ramnath的解决方案似乎比这个简单一些。His在许多(大多数?)情况下可能更好,但这种替代解决方案在其他情况下可能更好:
Test.
```{r echo=F,cache=F}
knitr::knit_hooks$set(document=function(x) {
paste(rapply(strsplit(x, '\n'), function(y) Filter(function(z) !grepl('# HIDEME',z),y)), collapse='\n')
})
```
```{r Vector Demo 1, results='hold', tidy=FALSE}
nums = 1:5
chars = LETTERS[1:5]
# examine the class and structure of vectors
{ # HIDEME
print(class(nums))
print(class(chars))
str(nums)
str(chars)
} # HIDEME
```
注:
{
和}
)将输出保持在一起。但是,返回内容而不打印内容的命令将是静默的(除非最后一行),因此我的print
将添加到这些行中。这可能是一个因素,也可能不是,取决于您的实际命令tidy
默认为TRUE
,这将我的第一条#HIDEME
注释移到左括号之前(此后我编辑为code,以反映nums
和chars
的定义)。奇怪,但可能是源清理的副作用。这就是为什么我强制tidy=FALSE
。由于这可能会影响代码的显示方式,因此将其用作每块选项至少可以限制漂亮的打印问题#HIDEME
实际上只是“注释字符加上一些模糊字符串”,以便于grep
ingknit_hook
并不“简单”,但我发现它不太可能对文档中的其他块产生副作用。这可能需要更具体的说明(我知道@Ramnath已经解决了Yihui的其他knitr
问题,因此可以有更“正确”的方法来更具体地完成这项工作。)(我尝试过,但没有通过“输出”钩子而不是“文档”钩子来完成。家庭作业。)collapse=TRUE,results=“hold”
(无需全局文档钩子)获得与Ramnath钩子相同的结果
如果您确实希望如问题所示的不同源/输出部分,那么您已经走上了正确的道路。只需使用块重用
即可获得输出组合,而无需重复自己的操作
```{r}
nums <- 1:5
char <- LETTERS[1:3]
```
```{r "Vector Demo", eval=FALSE}
# examine the class and structure of vectors
class(nums)
class(char)
str(nums)
str(char)
```
```{r "Vector Demo", echo=FALSE}
```
`{r}
谢谢。它现在的工作情况和预期的一样。不过,我还得等一段时间才能颁发赏金。@AlexEssilfie这基本上是存储库中的一个文件。在knitr的下一个版本中,您将使用collapse
选项以降价方式折叠输出,正如Thell在其回答中指出的那样。您的结果与@Ramnath的结果不同,这在latex/html代码检查和目视检查中是显而易见的。两种解决方案都不提供OP请求的代码分组和输出;在您的两个建议中,输出仍然按命令行单独分组,而不是分组在一个html“代码”或latex“着色”/“逐字”块中。虽然我确实喜欢更简单的代码,但它不能满足OP的要求。(我仍然不认为我的代码非常优雅,尽管我认为它是唯一符合要求格式的代码。)如果我遗漏了什么,请帮助我理解。我真的很喜欢你提供的rpubs链接,顺便说一句,做得不错,并演示了不同的选项组合。我并不是在所有渲染上都得到相同的结果;虽然我发现在其中遵循CSS/JS有点困难,但渲染结果非常平滑。谢谢,我会参考一下你的rpubs页面!也许是pandoc产生了不同的结果。每个输出位于单独的
块中。我同意Ramnath的解决方案有点具体,不安全,我的解决方案不太安全。以
块的形式显示每次运行的结果(分别完成,然后合并)。(pandoc 1.12.3,knitr 1.5;使用pandoc(knit('file.Rmd'))
;类似地使用format='latex'
,用于pdf比较,未显示。)很明显,此时我没有使用rmarkdown(也没有使用rstudio,尽管我认为这并不重要),所以这几乎肯定是render()
(来自rmarkdown)和pandoc()
(来自knitr)。也许Alex应该考虑一下他使用的是什么(他列出了“R-Markdown”,我认为它是格式,不一定是包)。与collapse=TRUE
没有区别。我使用的是knitr-1.5和pandoc-1.12.3。
# examine the class and structure of vectors
class(nums)
class(char)
str(nums)
str(char)
## [1] "numeric"
## [1] "character"
## num [1:5] 1 2 3 4 5
## chr [1:3] "A" "B" "C"
## Test
```{r echo = F, cache = F}
knitr::knit_hooks$set(document = function(x){
gsub("```\n*```r*\n*", "", x)
})
```
```{r VectoDemo, results = 'hold'}
nums = 1:5
char = LETTERS[1:5]
# examine the class and structure of vectors
class(nums)
class(char)
str(nums)
str(char)
```
Test.
```{r echo=F,cache=F}
knitr::knit_hooks$set(document=function(x) {
paste(rapply(strsplit(x, '\n'), function(y) Filter(function(z) !grepl('# HIDEME',z),y)), collapse='\n')
})
```
```{r Vector Demo 1, results='hold', tidy=FALSE}
nums = 1:5
chars = LETTERS[1:5]
# examine the class and structure of vectors
{ # HIDEME
print(class(nums))
print(class(chars))
str(nums)
str(chars)
} # HIDEME
```
```{r}
nums <- 1:5
char <- LETTERS[1:3]
```
```{r "Vector Demo", eval=FALSE}
# examine the class and structure of vectors
class(nums)
class(char)
str(nums)
str(char)
```
```{r "Vector Demo", echo=FALSE}
```