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

从R标记文件列表的yaml标题生成目录,r,yaml,r-markdown,R,Yaml,R Markdown,有没有一种方法可以通过R从R标记文件列表生成yaml标题列表?假设您有两个文件 A.Rmd B.风险管理费 那么列表应该是这样的 File |Title -----|-------------------- A.Rmd|Titel of first file B.Rmd|Titel of second file 该列表是否也可以生成为R标记文件?最好是带有原始文件的链接?这里有一个小而方便的函数,可以为您提供标题和文件名: read_RMD_titles <- function(file

有没有一种方法可以通过R从R标记文件列表生成yaml标题列表?假设您有两个文件

A.Rmd

B.风险管理费

那么列表应该是这样的

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

该列表是否也可以生成为R标记文件?最好是带有原始文件的链接?

这里有一个小而方便的函数,可以为您提供标题和文件名:

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\""  
read_RMD_titles感谢我修改了他/她的功能,如下所示:

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

可能会被使用。

这是一个起点:包装到下一行的标题如何?由于这个答案,我修改了函数Nice,您已经找到了满足您需求的解决方案!刚刚找到了这个
r标记:::parse_yaml_front_matter(readLines(file))$title
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\""  
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