gpt4 book ai didi

r - Rmarkdown 中的 flextable 自动调整到 word doc 导致表格超出页边距

转载 作者:行者123 更新时间:2023-12-04 12:22:07 27 4
gpt4 key购买 nike

嗨,我正在尝试使用 flextable在 Rmarkdown .doc 文档中格式化我的表格。我喜欢 flextable 的简单格式选项给出(但对其他类似的包开放)但发现一些我认为应该是基本功能的东西并不总是有效。

我想使表格适合 word 文档的宽度,以便在需要时将文本环绕在一列内以适合,但如果页面上有可用空间,则列将变宽,但不会达到该列的程度太宽以至于没有显示所有数据。

我在下面做了一个例子来说明我的问题。默认情况下,所有列都具有相同的宽度,并且文本会被换行以适应,但因此会浪费空间。我想将列拟合到数据中(使用 autofit ),但这会使列如此宽,以至于它们会从屏幕上消失。我希望有一个快乐的媒体 mpg , vscarb更宽,但一些文本换行仍在发生。例如。我要这个:

Desired output

显然我可以使用 flextable::width 手动更改宽度但是我的表格是通过自动化过程制作的,所以我不知道我希望每列有多宽。

这是我的示例,它显示了问题或 eithout autofit

---
title: "TestTable"
output: word_document
---

```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)


suppressWarnings(suppressPackageStartupMessages({library(knitr)
library(pander)
library(flextable)
library(tidyverse)
library(flextable)}))
```

## Normal Table
Without extra formatting, wraps text so that it fits on the page, but there is no need for column widths to be equal and could be wider on the page

```{r, echo=FALSE, results = 'asis' }
mydata <- mtcars %>% head(3) %>% select(mpg, cyl, hp,vs, gear, carb) %>%
mutate(mpg = paste0(mpg, "with extra stuff to make long"),
vs = paste0(vs, "+ extra stuff"),
carb = paste0(carb, "also with extra stuff to make longer"))

mytable <- mydata %>% flextable(theme_fun = theme_box)

mytable

```
## Table With autofit
But table with autofit goes off the edges of the page


```{r, echo=FALSE, results = 'asis' }

mytable %>% autofit()

```


## Table With autofit and manual breaks
And if manual breaks are inserted into the column autofit makes the columns too wide an they still go off the edges of the page

```{r, echo=FALSE, results = 'asis' }

mydataWithBreaks <- mtcars %>% head() %>% select(mpg, cyl, hp,vs, gear, carb) %>%
mutate(mpg = paste0(mpg, "\nwith extra stuff\n to make long"),
vs = paste0(vs, "+\n extra stuff"),
carb = paste0(carb, "\nalso with extra stuff\n to make longer"))

mydataWithBreaks %>% flextable(theme_fun = theme_box)%>% autofit()



```

最佳答案

我已经编写了一个函数来使表格适合当前工作良好的页面,尽管我仍然有点惊讶没有内置函数来执行此操作(例如)知道页面本身的宽度,所以如果有人知道任何仍然渴望听到的。

FitFlextableToPage <- function(ft, pgwidth = 6){

ft_out <- ft %>% autofit()

ft_out <- width(ft_out, width = dim(ft_out)$widths*pgwidth /(flextable_dim(ft_out)$widths))
return(ft_out)
}

关于r - Rmarkdown 中的 flextable 自动调整到 word doc 导致表格超出页边距,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57175351/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com