capture.output()和officer包将控制台输出导出到ms word

问题描述 投票:0回答:1

我想将 R 控制台的输出导出到 Word,并很好地对齐所有内容,如 R 控制台中所示。
我读到我必须创建某种单词 template.doc 或 template.docx 才能实现此目的。
我不知道该怎么做,也不知道创建该模板时必须特别注意哪些元素。

library(officer)
library(broom)

set.seed(1000)
my_data <- rbind(
  data.frame(time = "Pre", treatment = "Control", response = rnorm(100, mean=1)),
  data.frame(time = "Pre", treatment = "Treatment", response = rnorm(100, mean=2)),
  data.frame(time = "Post", treatment = "Control", response = rnorm(100, mean=1)),
  data.frame(time = "Post", treatment = "Treatment", response = rnorm(100, mean=2))
) %>% mutate(time = factor(time, levels = c("Pre", "Post"))) %>%
mutate(treatment = factor(treatment, levels = c("Control", "Treatment")))

model3 <- lm(response ~ time * treatment, data = my_data)

docx <- read_docx()

z5 <- capture.output(kableExtra::kable(tidy(model3)))

z5 <- as.data.frame(z5)

docx <- to_docx(docx, z5, "Title 1", "Subtitle 1")

fn <- tempfile(fileext = ".docx")

print(docx, fn)

首先给我这个:

其次还有这个:

这里的所有内容在文字上都是错位的,需要大量调整。我希望可以避免这种情况,并且在文字上看起来既美观又直接。我的第二个问题是如何在我的工作目录中创建名为“fn”的临时文件,因为它被保存并深深隐藏在 Local\Temp 等长文件路径中。
我将非常感谢您的帮助并解释该过程涉及的所有必要步骤,特别是创建该单词模板,以免弄乱我的单词当前设置中的任何内容。

r ms-word officer
1个回答
0
投票

虽然以下内容与

{officer}
有所不同,但这就是我获取原始 Markdown 管道表(
kableExtra::kable(tidy(model3))
的控制台输出)及其使用四开到 Word / docx 的方式:

---
format: docx
---
```{r}
#| warning: false
#| echo: false
#| output: false

library(dplyr, warn.conflicts = FALSE)
library(broom)

set.seed(1000)
my_data <- rbind(
  data.frame(time = "Pre", treatment = "Control", response = rnorm(100, mean=1)),
  data.frame(time = "Pre", treatment = "Treatment", response = rnorm(100, mean=2)),
  data.frame(time = "Post", treatment = "Control", response = rnorm(100, mean=1)),
  data.frame(time = "Post", treatment = "Treatment", response = rnorm(100, mean=2))
) %>% mutate(time = factor(time, levels = c("Pre", "Post"))) %>%
mutate(treatment = factor(treatment, levels = c("Control", "Treatment")))

model3 <- lm(response ~ time * treatment, data = my_data)
```

```{r}
#| echo: false

knitr::kable(tidy(model3), format = "pipe") |> 
  as.character() |>
  paste0(collapse = "\n") |>
  cat()
```
```{r}
#| label: tbl-pipe
#| tbl-cap: "Rendered pipe format"
#| echo: false

knitr::kable(tidy(model3), format = "pipe")
```

渲染为:

© www.soinside.com 2019 - 2024. All rights reserved.