从函数返回 print xtable 包括转义字符 knitr r

Posted

技术标签:

【中文标题】从函数返回 print xtable 包括转义字符 knitr r【英文标题】:returning print xtable from a function includes escaped characters knitr r 【发布时间】:2022-01-22 08:09:57 【问题描述】: 我正在尝试使用 xtable 在 knitr 中构建表格。 某些表具有多级列名 我在函数中构建表并将函数的输出存储为变量 这些表变量随后用于构建 knitr 报告

下面 Rmd 的代码

---
output:
  pdf_document
---
```r setup
library(knitr)
library(xtable)
library(tidyverse)

data <- diamonds %>% head(3) %>% select(carat, cut, color, depth)

make_table <- function()
  addtorow_comp <- list()
  addtorow_comp$pos <- list(0,0)
  addtorow_comp$command <- c("\\multicolumn3call the Cs & D \\\\\n",
                               "carat & cut & color & depth \\\\\n")
    
    tmp <- xtable(data,
                  caption="a table",
                  align = c('l|','c0.3in', 'c0.4in','c0.4in|', 'c0.4in|'),
                  digits= c(0,0,0,0,1))
    
  return(print(tmp, add.to.row = addtorow_comp, 
                         include.colnames = FALSE, 
                         rotate.colnames = FALSE, 
                         include.rownames = FALSE,
                         type="latex"))

tbl_to_output <- make_table()
```

```r output_table, results="asis", cache=FALSE
tbl_to_output

```

tbl_to_output 输出带有包含转义字符的文本的乳胶,例如\\ 表示单个斜杠,\n 表示换行符。如果我要直接从 output_table 块运行打印命令,它工作正常,但我想将表的构建与它们显示的位置分开。

期望的输出:

从函数返回时的输出:

【问题讨论】:

【参考方案1】:

我添加了一些更正和 cmets,现在它可以工作了:

---
output:
  pdf_document
---

```r setup, results='asis', echo=FALSE, include=FALSE
library(knitr)
library(xtable)
library(tidyverse)

data <- diamonds %>% head(3) %>% select(carat, cut, color, depth)

make_table <- function()
  addtorow_comp <- list()
  addtorow_comp$pos <- list(0,0)
  addtorow_comp$command <- c("\\multicolumn3call the Cs & D \\\\\n",
                               "carat & cut & color & depth \\\\\n")
    
    tmp <- xtable(data,
                  caption="a table",
                  align = c('l|','c@0.3in', 'c@0.4in','c@0.4in|', 'c@0.4in|'), #don't forget about @
                  digits= c(0,0,0,0,1))
    
  return(print(tmp, add.to.row = addtorow_comp, 
                         include.colnames = FALSE, 
                         rotate.colnames = FALSE, 
                         include.rownames = FALSE,
                         type="latex", 
                         table.placement="H", 
                         comment=FALSE)) #hold pos and no comments


#tbl_to_output <- make_table()
```


```r xtable, results='asis', echo=FALSE, message=FALSE
tbl_to_output <- make_table()
```

补充:

你也可以这样做:

\beginfigure
`r tbl_to_output`
\endfigure

【讨论】:

遗憾的是,我需要 '''r xtable 仅使用变量调用,不应在那里进行任何函数调用 @pluke 查看添加内容。如果我帮助了你 - 你可以接受我的回答,谢谢 ;) 感谢@manro 这行得通,可惜有 npo vanhilla 块的方式来做到这一点 @pluke 如果不是秘密,为什么不想在其他块中使用make table这个功能? 我在其他地方以编程方式创建了很多表,并希望尽可能使 Rmd 文件清晰。这当然是一个选择!我也很好奇是否有这样的方法

以上是关于从函数返回 print xtable 包括转义字符 knitr r的主要内容,如果未能解决你的问题,请参考以下文章

Python笔记001——输出与转义字符

python基础:内置函数、方法、转义字符大全

Lua学习笔记3. 函数可变参数和运算符转义字符串数组

从 WCF 服务返回的 JSON 数据包含转义字符

正则表达式拆分字符串,不包括可转义引号之间的分隔符

[Python]-2-字符串基础