2016-09-26 166 views
2

有沒有一種方法可以用R的手段生成R Markdown文件列表中的yaml標題標題列表?假設你有兩個文件從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降價生成文件太多 - 最好鏈接到原始文件?

回答

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 

藉着使用。

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

您現在可以修改這個辦法你自己的需要。這應該是一個起點。

+0

這是一個起點:如何將標題包裹到下一行? – Claude

+1

感謝這個答案我修改了函數[read_RMD_titles](http://stackoverflow.com/a/39705496/2107731) – Claude

+0

不錯,你已經找到了你的需求的解決方案! –

相關問題