我正在使用 R markdown 为学生创建随机练习。 我想在第一个非回显代码块中定义一些变量,并稍后使用这些变量及其在代码块中回显的预定义值,而不是它们的变量名称。
Reprex:在第一个 r markdown 代码块中我定义:
mu <- 100
sd <- 15
在稍后的 r markdown 代码块中,我想使用这些先前定义的变量,并使用已评估的先前定义的变量值回显代码。
pnorm(90, mean = mu, sd = sd)
因此,我希望将 knitted 文档中的上述代码块回显为:
pnorm(90, 均值 = 100, 标准差 = 15)
## 0.2524925
但它回响为:
pnorm(90, 均值 = mu, sd = sd)
## 0.2524925
我已经尝试在代码块中使用 get(mu) 或 eval(mu) 等函数。
但这只会导致错误或显示正确的结果值,但 echo 是实际代码:
pnorm(90, 均值 = eval(mu), sd = 15)
## 0.2524925
您可以通过在块选项中指定
code
参数来完成此操作。您可以使用 substitute()
将值放入代码中,然后 knitr
将该代码放入块中。
例如,
---
title: "Untitled"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
mu <- 100
sd <- 15
thecode <- substitute(pnorm(90, mean = mu1, sd = sd1),
list(mu1 = mu, sd1 = sd))
```
```{r code = thecode}
```
一些注意事项:
mu1
和sd1
)和您放入其中的值(mu
和) sd
)。knitr
格式要求您将整个块选项列表放在一行上。这就是为什么我将代码存储在 thecode
中。如果您有一小段代码,可以将表达式 substitute(...)
放入
直接进入块头。还有一种较新的格式,其中块选项位于单独的行上,并带有 #|
前缀。我用的不多。再次感谢 user2554330 告诉我有关 Replace() 函数和“code”块选项的信息。 他提出的解决方案很有魅力。
为了便于实现,我决定使用直接在代码块中调用的 replacement() 函数来重写它,如下所示:
r markdown_code_chunk, echo = FALSE
substitute(pnorm(90, mean = mu1, sd = sd1), list(mu1 = mu, sd1 = sd))
pnorm(30, mu, sd)
这最终导致以下内容包含在 Markdown 文档中:
## pnorm(90, mean = 100, sd = 15)
## [1] 0.2524925