R语言 最终块的输出显示在输出的顶部

ee7vknir  于 2023-05-11  发布在  其他
关注(0)|答案(2)|浏览(177)

在夸托文档中,我希望最后一个R块根据前面块的结果计算执行摘要。这个最后的块输出如何出现在报告的顶部?
预期输出:最终块(exec-summary)输出应出现在“Executive Summary”下和“Number of Rows”之前:

---
title: "exec-summary"
format: html
---

## Executive Summary Presentation

### Number of Rows

```{r chunk1}
x <- nrow(mtcars)

Number of Columns

y <- ncol(mtcars)

Executive Summary Computation

glue::glue("There are {x} rows an {y} columns")
3bygqnnd

3bygqnnd1#

您可以使用Lua过滤器来重新定位跨格式工作的块输出(即对于pdf,html,docx等)或可以使用javascript,这将只适用于html输出格式。我在下面展示这两种方法。
对于这两种情况,使用:::创建一个占位符空pandoc div,并使用一个id(将由lua或js代码使用),并使用另一个具有id的div Package exec-summary代码块(同样,将由lua或js代码使用以获取输出内容)。

使用Lua Filter(鲁棒方法)

---
title: "exec-summary"
format: html
filters: 
  - move-output.lua
---

## Executive Summary Presentation

::: {#placeholder}
:::

### Number of Rows

```{r chunk1}
x <- nrow(mtcars)

Number of Columns

y <- ncol(mtcars)

Executive Summary Computation

::: {#exec-summary}

glue::glue("There are {x} rows an {y} columns")

:::


**move-output.lua**

local exec_summary_output = nil

function get_exec_summary_output()
return {
Div = function(el)
if el.classes:includes("cell-output") then
exec_summary_output = el.content
el.content = ""
return el
end
end
}
end

function get_exec_summary()
return {
Div = function(el)
if el.identifier == "exec-summary" then
local elm = el:walk(get_exec_summary_output())
return elm
end
return el
end
}
end

function replace_placeholder(content)
return {
Div = function(el)
if el.identifier == "placeholder" then
el.content = content
end
return el
end
}
end

function Pandoc(doc)
local doc = doc:walk(get_exec_summary())
return doc:walk(replace_placeholder(exec_summary_output))
end


### 使用Javascript

title: "exec-summary"
format:
html:
include-in-header: move-output.html

Executive Summary Presentation

::: {#placeholder}
:::

Number of Rows

x <- nrow(mtcars)

Number of Columns

y <- ncol(mtcars)

Executive Summary Computation

::: {#exec-summary}

glue::glue("There are {x} rows an {y} columns")

:::


**move-output.html**

![](https://i.stack.imgur.com/xaw64.png)
taor4pac

taor4pac2#

我不认为你可以在级别2头之后立即得到你想要的东西(因为xy都不存在),但是你可以这样做:

---
title: "exec-summary"
format: html
---

## Executive Summary Presentation

```{r dynamic-summary, results='asis', echo=FALSE}
cat(
  paste0(
    "\n\n### Executive Summary Computation\n\n", 
    glue::glue("There are {nrow(mtcars)} rows and {ncol(mtcars)} columns")
  )
)

Number of Rows

x <- nrow(mtcars)

Number of Columns

y <- ncol(mtcars)

![](https://i.stack.imgur.com/p5P05.png)

相关问题