R 用源代码块中相应的值替换变量
我希望在R标记输出中显示参数值,而不是R 用源代码块中相应的值替换变量,r,knitr,r-markdown,R,Knitr,R Markdown,我希望在R标记输出中显示参数值,而不是params$…。例如,下面的第一个代码块在输出中显示params$file,但我想将其替换为samples.txt。我尝试用message添加第二个代码块,但这会输出一个白色代码块,我希望像所有其他R代码块一样有一个灰色背景 --- output: html_document params: file: samples.txt --- ```{r read, message=FALSE, collapse=TRUE, comment=""} x &
params$…
。例如,下面的第一个代码块在输出中显示params$file
,但我想将其替换为samples.txt
。我尝试用message
添加第二个代码块,但这会输出一个白色代码块,我希望像所有其他R代码块一样有一个灰色背景
---
output: html_document
params:
file: samples.txt
---
```{r read, message=FALSE, collapse=TRUE, comment=""}
x <- read_tsv(params$file)
x
```
This just needs a gray background
```{r print, echo=2, collapse=TRUE, comment=""}
message('x <- read_tsv("', params$file, '")')
x
```
---
输出:html\u文档
参数:
文件:samples.txt
---
```{r read,message=FALSE,collapse=TRUE,comment=”“}
x您可以修改源。根据您的需要量身定制的解决方案随即推出。对于替换参数
中所有元素的更通用的方法,请向下滚动
---
output:
pdf_document: default
html_document: default
params:
file: samples.txt
---
```{r, include=FALSE}
library(knitr)
library(stringr)
default_source_hook <- knit_hooks$get('source')
knit_hooks$set(source = function(x, options) {
x <- str_replace_all(x, pattern = 'params\\$file', paste0("'",params$file,"'"))
default_source_hook(x, options)
})
```
```{r print, echo=T, comment="", eval = T}
print(params$file)
```
我们使用gsubfn()
。此函数允许我们使用替换属性的函数(在通用gsub
中不可能)。此函数接受找到的元素,但由于使用了regex,因此只接受$
后面的部分。所以在这个区块中,y
等于file
,age
和awesome
当我尝试消息('helloworld',params$file'!')
它工作正常。否则,您的示例不会重复更改echo选项。如果echo=TRUE,则区块为灰色,如果我将echo=FALSE设置为隐藏params$文件,则区块为白色。谢谢,第一个示例适用于我,第二个示例使用gsubfn
在我的mac上打开X11,然后崩溃Rstudio,但输出也正确。有趣。我也在Mac上,但这一切都没有发生在我身上:在一个新的RStudio会话中,只需键入library(gsubfn)就可以加载所需的proto包,这会导致XQuartz打开(如果我一直打开它,它会很好),所以proto包会导致问题。另外,第二个块中的is.character(v)
应该是is.character(y)
,是的!错过了,对不起:)
---
output:
pdf_document: default
html_document: default
params:
file: samples.csv
age: 28
awesome: true
34: badname
_x: badname
---
```{r, include=FALSE}
library(knitr)
library(gsubfn)
default_source_hook <- knit_hooks$get('source')
knit_hooks$set(source = function(x, options) {
x <- gsubfn(x = x, pattern = "params\\$`?([\\w_]+)`?", function(y) {
y <- get(y, params)
ifelse(is.character(y), paste0("'", y, "'"), y)
})
default_source_hook(x, options)
})
```
```{r print, echo=T, comment="", eval = T}
file <- params$file
age <- params$age
awsm <- params$awesome
# dont name your variables like that! works though...
badexmpls <- c(params$`34`, params$`_x`)
```