如何使 flextable 适合 word_document 输出中侧边框的宽度?降价

How to fit flextable to the width of the side borders in the word_document output? Rmarkdown

我在 Rmarkdown 中使用 flextable() 创建 table。我将我的代码编织成 word_document 输出。有谁知道如何使 table 的宽度不适合内容,而是适合 word_document 输出中侧边框的宽度?

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

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

## R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.

When you click the **Knit** button a document will be generated that includes both content as well as the output of any embedded R code chunks within the document. You can embed an R code chunk like this:

```{r cars}
head(cars)%>%
  flextable()%>%
  theme_box()%>%
  autofit()

```

下面我附上两张图:

谢谢!

there,David Gohel 为这个任务做了一个很好的函数:)

给你举个例子:

```{r cars}
head(cars) %>% 
  flextable %>%
  width(., width = 3.35) %>% 
  theme_box() 
```

基于解决方案,我编写了一个代码,使table具有给定的宽度,无论table中有多少列。这也是我的目标,我可能没有在我的问题中解释清楚。

```{r cars}
 i = 16.5 # width of the side borders in the word_document output (in centimeters)
 w = i*0.3937 # width of the side borders in the word_document output (in inches)
 
    # Table 1 with 2 columns 
    head(cars,3) %>% 
      flextable %>%
      width(., width = (w/(ncol(cars)))) %>% 
      theme_box() 
       
    # Table 2 with 5 columns
    head(iris,3) %>% 
      flextable %>%
      width(., width = (w/(ncol(iris)))) %>% 
      theme_box() 
```

word_document输出

中根据列内容和侧边框调整列宽的解决方案
---

title: ""
output: word_document
---

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

## R Markdown

This is an R Markdown document. Markdown is a simple formatting syntax for authoring HTML, PDF, and MS Word documents. For more details on using R Markdown see <http://rmarkdown.rstudio.com>.


```{r cars}
 i = 16.5 # width of the side borders in the word_document output (in centimeters)
 w = i*0.3937 # width of the side borders in the word_document output (in inches)
 
df <- data.frame('model' = rownames(mtcars), mtcars[1:5])
t<-flextable(head(df,3))
t #not fitted table, all cols have the same base widths
t<-autofit(t)
t #auto-fitted, cols have the widths based on col content
#get column widths proportions from auto-fitted table
auto_widths <- dim(t)$widths/sum(dim(t)$widths)
# fit col widths based on col content and side borders in the word_document output
t<-width(t,  width=w*auto_widths)
t
```