您可以使用反引号,这将为您提供等宽字体,但不是灰色背景阴影:
f。有 `sum(is.na(df$Height)) =` `r sum(is.na(df$Height))` 缺少高度值。
我刚刚遇到这个问题,大约两年前我试图回答这个问题,并想到了一种方法来在单个内联语句中获取代码及其评估的输出。我们只需要一个辅助函数。下面是一个例子。代码作为文本字符串输入,函数返回代码和评估代码的结果:
---
title: "RMarkdown teaching demo"
author: "whoever"
output: pdf_document
---
```{r}
fnc = function(expr) {
paste(expr, " = ", eval(parse(text=expr)))
}
# Add some missing values
iris$Sepal.Length[c(3,5,10)] = NA
```
f. There are `r fnc("sum(is.na(iris$Sepal.Length))")` missing height values.
以下是输出。
它有效,但有两个问题。首先,代码不是等宽字体。其次,代码没有用灰色背景突出显示。
我认为我可以使用乳胶
\texttt{}
标签获得等宽字体。
```{r}
fnc = function(expr) {
paste("\\texttt{", expr, " = ", eval(parse(text=expr)), "}", sep="")
}
```
以交互方式运行时,这似乎会返回所需的字符串(
"\\texttt{sum(is.na(iris$Sepal.Length)) = 3}"
),但当我尝试编织文档时,会抛出以下错误:
! Extra }, or forgotten $. <recently read> \egroup l.163 ...texttt{sum(is.na(iris$Sepal.Length)) = 3}
我想我可以用
\hl{}
标签突出显示(这也需要乳胶标题中的 \usepackage{color, soul}
):
```{r}
fnc = function(expr) {
paste("\\hl{", expr, " = ", eval(parse(text=expr)), "}", sep="")
}
```
但是,这再次引发错误:
! Argument of \SOUL@addmath has an extra }. <inserted text> \par l.161 ...re \hl{sum(is.na(iris$Sepal.Length)) = 3}
在
texttt{}
文档中与常规文本一起使用时,\hl{}
和 rmarkdown
都可以正常工作。
所以,我不确定如何获取等宽字体或突出显示的文本,但至少这从单个内联 R 语句向代码+评估代码迈出了一步。希望对语言计算和输出乳胶标记有更多了解的人可以提供更多有关如何使其按预期工作的见解。
我不知道字体问题。除了
`text`
之外,我没有看到任何其他方法来获得等宽 text
。我还得绞尽脑汁才能得到第一个版本的“文本”,周围是反引号。
但是,这是函数的更通用版本
fnc()
,也允许舍入
# Inline expressions of the form `r Rexpr(expr)` to give "expr = value", e.g.,
# `r Rexpr(cor(x, y))` giving "cor(x, y) = 0.53" (but rounded)
Rexpr = function(expr, digits=3) {
value <- eval(parse(text=expr)) |> round(digits)
paste(expr, " = ", value)
}