【问题标题】:Access name of .rmd file and use in R.rmd 文件的访问名称并在 R 中使用
【发布时间】:2015-05-10 15:29:13
【问题描述】:

我正在编写一个名为 MyFile.rmd 的降价文件。 如何在编织过程中访问字符串MyFile并将其用于:

  • 在 YAML 标头的标题部分使用?
  • 在后续的 R 块中使用?

    ---
    title: "`r rmarkdown::metadata$title`"
    author: "My Name"
    date: "10. Mai 2015"
    output: beamer_presentation
    ---
    
    ## Slide 1
    
    ```{r}
    
    rmarkdown::metadata$title
    
    ```
    

导致...

...这是不正确的,因为我正在编织的文件名称不同。

> sessionInfo()
R version 3.1.2 (2014-10-31)
Platform: x86_64-apple-darwin13.4.0 (64-bit)

locale:
[1] de_DE.UTF-8/de_DE.UTF-8/de_DE.UTF-8/C/de_DE.UTF-8/de_DE.UTF-8

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

loaded via a namespace (and not attached):
[1] digest_0.6.8    htmltools_0.2.6 rmarkdown_0.5.1 tools_3.1.2     yaml_2.1.13

【问题讨论】:

    标签: r markdown knitr


    【解决方案1】:

    rmarkdown::metadata 为您提供 R Markdown 的元数据列表,例如rmarkdown::metadata$title 将是您文档的标题。一个例子:

    ---
    title: "Beamer Presentation Title"
    author: "My Name"
    date: "10\. Mai 2015"
    output: beamer_presentation
    ---
    
    ## Slide 1
    
    Print the title in a code chunk.
    
    ```{r}
    rmarkdown::metadata$title
    ```
    
    ## Slide 2
    
    The title of the document is `r rmarkdown::metadata$title`.
    

    要获取输入文档的文件名,请使用knitr::current_input()

    【讨论】:

    • 感谢 Yihui,对于 R 块它可以工作。对于 YAML 标题部分,我需要进一步的帮助。使用标题:“`r rmarkdown::metadata$title” 不起作用。
    • @user2030503 我无法复制它。请编辑您的帖子,并详细说明“不起作用”的含义(以及sessionInfo())。
    • 亲爱的一辉,问题已修改。
    • @user2030503 您不应该在 R 代码块中编写内联 R 代码。看来您需要先了解有关 knitr 的基础知识。以下是一些最小示例:yihui.name/knitr/demo/minimal
    • 亲爱的一辉,很抱歉,即使在阅读了有关 knitr 的更多信息后,我也没有想出解决方案。
    【解决方案2】:

    您可以像这样使用yaml 库:

    library(yaml)
    
    # Read in the lines of your file
    lines <- readLines("MyFile.rmd")
    # Find the header portion contained between the --- lines. 
    header_line_nums <- which(lines == "---") + c(1, -1)
    # Create a string of just that header portion
    header <- paste(lines[seq(header_line_nums[1], 
                              header_line_nums[2])], 
                    collapse = "\n")
    # parse it as yaml, which returns a list of property values
    yaml.load(header)
    

    如果你保存yaml.load返回的列表,你可以根据需要在不同的块中使用它。要获得标题,您可以这样做:

    properties <- yaml.load(header)
    properties$title
    

    【讨论】:

    • 啊!我找到了。 rmarkdown 包开发了一个函数 yaml_front_matter 来执行您在此处编写的行。
    【解决方案3】:

    简单总结一下易辉的回答:

        ---
        title: "`r knitr::current_input()`"
        author: "My Name"
        date: "10. Mai 2015"
        output: beamer_presentation
        ---
    
        ## Slide 1
    
        ```{r}
    
        knitr::current_input()
    
        ```
    

    哪款针织物能胜任。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 2013-11-28
      相关资源
      最近更新 更多