有没有办法通过R的方式从R Markdown文件列表中生成yaml标题列表?假设你有两个文件
A.Rmd
---
title: Titel of first file
---
B.Rmd
---
title: Titel of second file
---
然后列表应该是
File |Title
-----|--------------------
A.Rmd|Titel of first file
B.Rmd|Titel of second file
此列表是否也可以生成为R Markdown文件 - 最好是链接到原始文件?
答案 0 :(得分:2)
这是一个小而方便的功能,它为您提供标题和文件名:
read_RMD_titles <- function(files){
names_list <- lapply(1:length(files), function(x){
title <- readLines(files[x])[2]
return(c(files[x], title))
})
return(unlist(names_list))
}
read_RMD_titles(files = c("A.Rmd", "B.Rmd"))
# [1] "A.Rmd" "title: \"Untitled\""
# [3] "B.Rmd" "title: \"Untitled\""
您现在可以根据自己的需要修改此方法。这应该是一个起点。
答案 1 :(得分:0)
感谢the answer from J_F我修改了他/她的功能如下:
read_RMD_titles <- function(files){
names_list <- lapply(files, function(file) {
lines = readLines(file)
headerIdx = grep("^---\\s*$",lines)
title = ""
if (2 <= length(headerIdx)) {
titleIdx = grep("^title:",lines[c(headerIdx[1]:headerIdx[2])])
if (1 <= length(titleIdx)) {
title = trimws(sub("^title:\\s*", "", lines[headerIdx[1] + titleIdx[1] - 1]))
for (i in c(headerIdx[1] + titleIdx[1]:headerIdx[2])) {
if (0 < regexpr("^\\s{2,}", lines[i])) {
title = paste(title, trimws(lines[i]))
} else {
break
}
}
}
}
return (c(file,title))
})
return(unlist(names_list))
}
如果你喜欢这个,请投票给他/她的回答。
...或感谢answer to another question:
rmarkdown:::parse_yaml_front_matter(readLines(file))$title
可能会被使用。