2016-10-08 4 views
5

ich rmarkdown::render("script.r") bin mit setzen einer HTML-Version eines R-Skript zu erstellen. Die Ausgabe beginnt mit script.r als Titel, mein Login als Autor und der aktuelle date als Datum. Ich möchte nicht meinen Login, noch meinen Arbeitsplan verschenken.Mit rmarkdown :: render Belegkopf (Titel, Autor, Datum)

Ich weiß, dass diese Metadaten (Titel, Autor, Datum) in einem YAML-Block in einer Rmd Datei festgelegt werden können, aber ich möchte vermeiden Erstellen/Bearbeiten dieser Datei und arbeiten nur mit dem ursprünglichen R-Skript.

Gibt es eine Möglichkeit, Metadaten (Titel, Autor, Datum) über rmarkdown::render oder andere Funktionen wie knitr::opts_chunk$set zu setzen?

Alternativ kann diese Metadaten innerhalb des R-Skript festgelegt werden?

Bitte vermeiden Sie darauf hindeutet, dass ich stattdessen eine Rmd Datei schreiben soll ..

Antwort

2

Die Rmarkdown Dokumentation (siehe ?compile_notebook) beschreibt eine Möglichkeit, dies zu tun, indem er eine speziell formatierte Kommentar in Ihrer script.R Datei enthält.

Zum Beispiel gehört zu diesem Kommentar in Ihrem Skript den Titel, Autor und Datum einzustellen.

#' --- 
#' title: "Crop Analysis Q3 2013" 
#' author: "John Smith" 
#' date: "May 3rd, 2014" 
#' --- 

Dies gibt Ihnen die folgende Ausgabe:

rmarkdown_output

+0

Vielen Dank, überraschte, dass sie diese in nicht erwähnen '? Render', und es ist nicht einmal in dem ** Siehe auch ** Abschnitt. – ggll

+0

@ggll danke, wenn es funktioniert, können Sie bitte die Antwort ankreuzen? –

+0

@ggll Der Punkt in meiner gelöschten Antwort war folgender: Dieser formatierte Stil ist nicht spezifisch für die Metadaten. Es funktioniert wie folgt: Jede Zeile nach einem '# 'wird in der' md'-Datei wörtlich wiedergegeben, ob es sich um Metadaten oder etwas anderes handelt. Deshalb wollte ich dich zu "? Knitr :: spin" führen, um mehr über diesen formatierten Stil zu erfahren. –

1

Ich weiß nicht, ob dies eine besonders große Lösung ist, aber es ist zu lang für einen Kommentar, geht so hier. Ich schaute auf rmarkdown::render und ich glaube nicht, was Sie wollen, ist möglich, es sei denn Sie selbst definieren render. Sehen Sie sich Zeile 85 und folgende an:

metadata <- paste("\n", "---\n", "title: \"", input, 
        "\"\n", "author: \"", Sys.info()[["user"]], "\"\n", 
        "date: \"", date(), "\"\n", "---\n", sep = "") 
if (!identical(encoding, "native.enc")) 
    metadata <- iconv(metadata, to = encoding) 
cat(metadata, file = knit_input, append = TRUE) 

Dies wird nicht von einer Bedingung gesteuert. So ein chaotischer Weg ist, render neu zu definieren und eine seiner Linien zu ersetzen. Ich Anleihe eine sachdienliche Antwort auf diese Frage: Editing R functions

body(render)[[25]] <- substitute(
    if (identical(tolower(tools::file_ext(input)), "r")) { 
    spin_input <- intermediates_loc(file_with_meta_ext(input, 
                "spin", "R")) 
    file.copy(input, spin_input, overwrite = TRUE) 
    intermediates <- c(intermediates, spin_input) 
    spin_rmd <- knitr::spin(spin_input, knit = FALSE, envir = envir, 
         format = "Rmd") 
    intermediates <- c(intermediates, spin_rmd) 
    knit_input <- spin_rmd 

    # Our edited code starts here! 
    metadata <- paste("\n", "---\n", "title: \"", getOption("yaml_title"), "\"\n", 
        "author: \"", getOption("yaml_author"), "\"\n", "date: \"", 
        getOption("yaml_date"), "\"\n", "---\n", sep = "") 
    # Our edited code ends here! 

    if (!identical(encoding, "native.enc")) 
     metadata <- iconv(metadata, to = encoding) 
    cat(metadata, file = knit_input, append = TRUE) 
    } 
) 

Nun, meine Datei junk.r wie folgt:

plot(mtcars$mpg, mtcars$hp) 

und jetzt render("junk.r") gibt mir ...

enter image description here

Jetzt können Sie options verwenden Sie Ihre eigenen Einträge für Titel, Autor und/oder Datum zu verwenden, oder es blan verlassen k. Natürlich wäre es einfacher, die .r-Datei zu bearbeiten oder eine .Rmd-Datei zu erstellen, aber Sie haben diese ausgeschlossen.

+1

Ich hatte den gleichen Code-Teil bemerkt, aber ich denke, es setzt nur die Standardwerte. – ggll

Verwandte Themen