RMarkdown Chunk - 不要回应最后一个表达

时间:2018-03-28 18:08:44

标签: r r-markdown knitr

我在RMarkdown文档中有一个块,如下所示:

```{r, echo=-4}
a <- 1
b <- 2
x <- a + b
print(paste(c("`x` is equal to ", x), collapse=""))
```

当我编织它时,它没有按照预期和记录here显示第4个表达式。

a <- 1
b <- 2
x <- a + b
## [1] "`x` is equal to 3"

但是,如果我在块中添加另一行,我必须更新echo参数或隐藏错误的表达式:

```{r, echo=-4}
a <- 1
b <- 2
c <- 3
x <- a + b + c
print(paste(c("`x` is equal to ", x), collapse=""))
```

输出:

a <- 1
b <- 2
c <- 3
print(paste(c("`x' is equal to ", x), collapse=""))
## [1] "`x` is equal to 6"

RMarkdown Chunk中是否有一种编程方式可以指定您不想在块中回显最后一个表达式而无需手动计算总行数?

3 个答案:

答案 0 :(得分:3)

我喜欢

Sub nameChange()
Dim source As FileSystemObject
Dim fold As folder
Dim fObj As File
Dim path As String, newName As String, number As String, ext As String
Dim i As Long

On Error GoTo closeSub
With Application.FileDialog(msoFileDialogFolderPicker)
  .Show
  path = Application.FileDialog(msoFileDialogFolderPicker).SelectedItems(1)
End With

Set source = New FileSystemObject
Set fold = source.GetFolder(path)
i = 1
newName = InputBox("New name")

For Each fObj In fold.Files
  ext = Mid(fObj.Name, (InStrRev(fObj.Name, ".")))
  Name fObj As path & "\" & newName & i & ext
  i = i + 1
Next fObj

closeSub:
 Exit Sub

End Sub

这样可以提供更清晰的结果。

答案 1 :(得分:3)

这是一个黑客攻击:使用knitr hooks标记要删除输出的行,并在打印输出时将其删除。
以下解决方案实现了一个名为**\*test*.dll !**\*TestAdapter*.dll <--- changed !**\*VisualStudio*.dll <--- added !**\obj\** 的新块选项,用于删除源代码的rm.last最后一行。
n有一个内置的源代码块,因此您必须使用knitr检索它。

knitr::knit_hooks$get('source')

但是,如果你的最后一行代码是--- title: "Hack the output with hooks" --- ```{r setup, include=FALSE} knitr::opts_hooks$set(rm.last = function(options) { options$code <- paste0( options$code, c(rep("", length(options$code) - options$rm.last), rep(" # REMOVE", options$rm.last) ) ) options }) builtin_source_hook <- knitr::knit_hooks$get('source') knitr::knit_hooks$set(source = function(x, options) { if (!is.null(options$rm.last)) x <- grep("# REMOVE$", x, invert = TRUE, value = TRUE) if (length(x) > 0) { return(builtin_source_hook(x, options)) } else { invisible(NULL) } }) ``` ```{r, rm.last=1} a <- 1 b <- 2 x <- a + b print(paste(c("`x` is equal to ", x), collapse="")) ``` ,你显然必须遵循@atiretoo的答案。

答案 2 :(得分:2)

不,没有办法做到这一点。如果您查看knitr源代码,您会看到它使用

获取代码行的子集
code = code[options$echo]

因此它使用常规R索引来选择条目。 R没有办法说&#34;最后一个元素&#34;在值的常量值或向量中,rmarkdownknitr没有办法说出&#34;最后一个表达式&#34;。使用@ atiretoo的建议(只是把它放在一个单独的块中)似乎是你最好的选择。