【问题标题】:Printing a database as text将数据库打印为文本
【发布时间】:2021-02-09 12:44:54
【问题描述】:

我是 R Markdown 新手。 我有一个数据库如下:

text <- c("aaa","bbb", "ccc")
year <- c(2003,2004,2005)
author <- c("MV", "RV", "MV")
db <- as.data.frame(cbind(text, year, author))

我想打印一个要点如下:

  • 啊啊

    2003,MV

  • bbb

    2004,房车

  • ccc

    2005,MV

我尝试如下:

- `r db[1, 1]`

- `r db[1, 2]`
- `r db[1, 3]`

- `r db[2, 1]`

- `r db[2, 2]`
- `r db[2, 3]`

- `r db[3, 1]`

- `r db[3, 2]`
- `r db[3, 3]`

有没有办法在不列出每一行的情况下自动完成?

【问题讨论】:

  • 对齐方式应该和编辑后的问题一样还是原帖中显示的那样?

标签: r r-markdown markdown


【解决方案1】:

您可以编写将数据打印为降价文本的 R 代码,例如使用 glue

library(glue)

text <- c("aaa","bbb", "ccc")
year <- c(2003,2004,2005)
author <- c("MV", "RV", "MV")
db <- as.data.frame(cbind(text, year, author))

glue_data(
  db,
  "* {text}  ",
  "{year} {author}",
  .sep = "\n"
)
#> * aaa  
#> 2003 MV
#> * bbb  
#> 2004 RV
#> * ccc  
#> 2005 MV

如果您将其放入带有选项 results='asis' 的 RMarkdown 块中,则生成的 Markdown 将包含在您的针织文档中。

【讨论】:

    【解决方案2】:

    虽然 Joe Roe 的回答非常好,但对于像我这样不喜欢安装软件包的人来说,下面是一个解决方案;)

    在列表之前的一个块中:

    ```{r echo=FALSE}
    manually_assembled_list <- paste0(
      paste0("* ",   db$text, "  \n"),
      paste0(db$year,  ", ", db$author, "  \n"),
      collapse=""
    )
    ```
    

    然后在 Rmd 正文中:

    `r manually_assembled_list`
    

    【讨论】:

    • 也是一个很好的解决方案,虽然胶水是 knitr 的依赖项(通过 stringr),所以如果你使用 RMarkdown,你已经安装了它:)
    • 哦,我不知道!感谢您提供更多信息!
    猜你喜欢
    • 2011-10-09
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2021-10-09
    • 2020-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多