从R Markdown文件列表的yaml头标题生成目录表



是否有一种方法可以从R Markdown文件列表中生成yaml头标题列表?假设您有两个文件

。限制型心肌病

---
title: Titel of first file
---

B。限制型心肌病

---
title: Titel of second file
---

那么列表看起来应该是

File |Title
-----|--------------------
A.Rmd|Titel of first file
B.Rmd|Titel of second file

是否可以将此列表生成为R Markdown文件-最好带有指向原始文件的链接?

这是一个小而方便的函数,它为您提供标题和文件名:

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""  

您现在可以根据自己的需要修改此方法。这应该是一个起点。

感谢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))
}

如果你喜欢这个,请为他/她的回答投票。

…或者感谢另一个问题的答案:

rmarkdown:::parse_yaml_front_matter(readLines(file))$title

最新更新