在降价中将列表对象转换为无序列表
Convert list object to unordered list in markdown
我有一个包含字符向量的列表。我想在 RMarkdown 文档中创建一个无序列表。我试图通过遍历列表并将输出粘贴到降价列表中来完成此操作。在 knitr
中打印结果 'asis'
。这是一个玩具示例。
test <- list(x = c('a', 'b', 'c'), y = c('d', 'e'))
我想创建一个这样的无序列表:
- x
- a
- b
- c
- y
- d
- e
我尝试使用 for 循环结合 cat
和 paste0
来做到这一点。
cols <- names(test)
for (columns in names(test)) {
cat(paste0("- ", names(test[columns]), '\n', ' ',
"- ", test[[cols[columns]]], '\n'))
}
输出
- x
-
- y
-
如果能帮助我获得上面描述的所需无序列表,我将不胜感激。
试试这个:
---
title: "SO Answer"
author: "duckmayr"
date: "September 14, 2018"
output: html_document
---
```{r unordered_list, echo=FALSE, results='asis'}
test <- list(x = c('a', 'b', 'c'), y = c('d', 'e'))
for (name in names(test)) {
cat("-", name, '\n', paste(' -', test[[name]], '\n'))
}
```
对我来说,这会产生:
您之前尝试的方式有两个问题:
- 您应该使用
test[[columns]]
而不是 test[[cols[columns]]]
进行子集化,并且
- 即使在您修复该问题后,您仍然可以看到
paste
给您带来了一些问题:
for (columns in names(test)) {
cat(paste0("- ", names(test[columns]), '\n', ' ',
"- ", test[[columns]], '\n'))
}
- x
- a
- x
- b
- x
- c
- y
- d
- y
- e
这是一个不需要循环的解决方案。 List 和yaml 文件非常相似,因此你可以将它转换为yaml(稍微修改一下)和cat
.
test <- list(A = c("a", "b", "c"), B = c("d", "e"), C = 1:5)
cat(gsub("^!omap\n|:", "", yaml::as.yaml(test, omap = TRUE)))
解释:
- 使用
yaml
package 中的 as.yaml
函数将列表转换为有序的 yaml。
- 使用
gsub
删除 omap header。
cat
结果。
您也可以将它放在自定义函数中,这样您就不会泛滥代码:
catList <- function(inputList) {
cat(gsub("^!omap\n|:", "", yaml::as.yaml(inputList, omap = TRUE)))
}
catList(test)
我有一个包含字符向量的列表。我想在 RMarkdown 文档中创建一个无序列表。我试图通过遍历列表并将输出粘贴到降价列表中来完成此操作。在 knitr
中打印结果 'asis'
。这是一个玩具示例。
test <- list(x = c('a', 'b', 'c'), y = c('d', 'e'))
我想创建一个这样的无序列表:
- x
- a
- b
- c
- y
- d
- e
我尝试使用 for 循环结合 cat
和 paste0
来做到这一点。
cols <- names(test)
for (columns in names(test)) {
cat(paste0("- ", names(test[columns]), '\n', ' ',
"- ", test[[cols[columns]]], '\n'))
}
输出
- x
-
- y
-
如果能帮助我获得上面描述的所需无序列表,我将不胜感激。
试试这个:
---
title: "SO Answer"
author: "duckmayr"
date: "September 14, 2018"
output: html_document
---
```{r unordered_list, echo=FALSE, results='asis'}
test <- list(x = c('a', 'b', 'c'), y = c('d', 'e'))
for (name in names(test)) {
cat("-", name, '\n', paste(' -', test[[name]], '\n'))
}
```
对我来说,这会产生:
您之前尝试的方式有两个问题:
- 您应该使用
test[[columns]]
而不是test[[cols[columns]]]
进行子集化,并且 - 即使在您修复该问题后,您仍然可以看到
paste
给您带来了一些问题:
for (columns in names(test)) {
cat(paste0("- ", names(test[columns]), '\n', ' ',
"- ", test[[columns]], '\n'))
}
- x
- a
- x
- b
- x
- c
- y
- d
- y
- e
这是一个不需要循环的解决方案。 List 和yaml 文件非常相似,因此你可以将它转换为yaml(稍微修改一下)和cat
.
test <- list(A = c("a", "b", "c"), B = c("d", "e"), C = 1:5)
cat(gsub("^!omap\n|:", "", yaml::as.yaml(test, omap = TRUE)))
解释:
- 使用
yaml
package 中的as.yaml
函数将列表转换为有序的 yaml。 - 使用
gsub
删除 omap header。 cat
结果。
您也可以将它放在自定义函数中,这样您就不会泛滥代码:
catList <- function(inputList) {
cat(gsub("^!omap\n|:", "", yaml::as.yaml(inputList, omap = TRUE)))
}
catList(test)