2015-02-13 21 views
18

Chciałbym utworzyć jeden z plików wyjściowych w formacie R, w którym nazwa pliku wyjściowego powinna być zdefiniowana w dokumencie. Czy istnieje sposób, aby przekonać markdown do manipulowania wyjściową nazwę pliku w taki sposób? Idealnie chciałbym przekazać nazwę pliku przez r porcję.R Markdown - zmienna nazwa wyjściowa

+0

Czy mógłbyś opublikować swoje polecenie? czy chcesz nazywać pliki "dynamicznie"? 'wklej0 (" plik _ ", x,". pdf ")?' x może być datą lub nazwą zestawu danych – rmuc8

+0

Do tej pory używałem RStudio, wykonując polecenie dzianiny, bez szukania więcej szczegółów. Ale powinienem przyjrzeć się odpowiedzi na ilyas, brzmi jak zdecydowanie jaśniejsze podejście. – Sosel

Odpowiedz

23

Możesz zachować prostotę korzystania z Knit przycisk RStudio i powtarzalność nagłówku YAML przy użyciu nieudokumentowane knit hak przedefiniować co przycisk robi (funkcja domyślnej nazwie jest rmarkdown::render). Parametr output_file funkcji renderowania określa nazwę pliku, więc ustawiając go, zastępujesz standardowe zachowanie przy użyciu tego samego prefiksu co nazwa pliku wejściowego.

np. aby zawsze wysyłany plik o nazwie myfile.pdf

knit: (function(inputFile, encoding) { rmarkdown::render(inputFile, encoding = encoding, output_file = file.path(dirname(inputFile), 'myfile.pdf')) }) 

Funkcja może być anonimowy jedno-liner, jak również importowane z pakietu, jak widać here z slidify.

Możesz ustawić własne nagłówki YAML (nie wiem, czy tak ogólnie się to zaleca), dostępne pod rmarkdown::metadata$newheader, ale nie wydają się dostępne z tego rodzaju funkcji, o ile widzę.

Jeśli chodzi o przekazywanie nazwy pliku z fragmentu R ... jeśli chodzi o fragmenty kodu poniżej nagłówka YAML, z mojego doświadczenia nie sądzę, że jest to możliwe (?). Nagłówki mogą zawierać wbudowane polecenia R (pojedyncze zamknięcie załączone, zaczynając od r), ale najwyraźniej nie dla tej funkcji przechwytującej.

Podobne:

+0

Błąd w rcmcdown :: metadata $ tytuł <- "Mój tytuł": obiekt "rmarkdown" nie został znaleziony – jzadra

+0

@ yihuixie, czy mogę przekazać parametry Cokolwiek na nazwy plików wyjściowych w ten sposób? Mój przecinek wykorzystuje params $ dane do pobrania odpowiedniego pliku danych, ale nie wygląda na to, że działa on w twoim jednolinijkowym - 'params $ dane nie znalezione'. Mogę przekazać wszystko, co chcę, ze skryptu z 'rmarkdown :: render (params = list (data =" Oct2017data "), output_file =" Oct2017_analysis.html ")', ale oczywiście chcę móc go wpisać tylko raz. – StasK

14

To jest dość dużo, co mam zrobić:

rmarkdown::render('my_markdown_report.Rmd', 
        output_file = paste('report.', Sys.Date(), 
             '.pdf', sep='')) 

Mam trzy scenariusze - jeden ciągnie dane i przetwarza je, drugi utworzone wykresy & tabele dla raportu. Trzeci tworzy raport oparty na pliku przeceny. Kod widać powyżej jest częścią trzeciego scenariusza

+0

Do tej pory używałam tylko polecenia KnStudios knit, aby skompilować jakiś plik.Jeśli rozumiem cię poprawnie, tworzysz rzeczywisty plik przeceny za pomocą poleceń R, a nawet sterujesz knowaniem przecinków za pomocą poleceń R? Dotychczas nie znałem tego podejścia, ale przyjrzę mu się bliżej. Do tej pory przygotowywałam dane i przetwarzałam je w pierwszym skrypcie, ale już w drugim kroku ręcznie utworzyłem plik oceny, umieszczając np. różne źródła danych w niektórych raportach. – Sosel

+0

Tak. plik markdown jest osobnym skryptem, odczytuje dane, umieszcza wykresy i tabele razem. Nazywa się to jednak z zewnętrznego skryptu - możesz także uruchomić/uruchomić go z Rstudio i utworzy plik o tej samej nazwie. Ja jednak nazywam to oddzielnym skryptem, a po rmarkdown tworzy plik wynikowy pdf jest kopiowany do różnych miejsc. – ilya

2

ślad za co @ilya napisał, ta strona ma świetny przykład demonstrujący to, co opisują, czyli jak tworzyć wiele powtarzalnych raportów z tego samego dokumentu .Rmd :

http://www.reed.edu/data-at-reed/software/R/markdown_multiple_reports.html

Strona internetowa wykorzystuje dwa skrypty, jeden skrypt R i jeden skrypt Rmarkdown tworzenia wielu raportów. Użyłem go jako szablonu do mojej własnej pracy i uznałem to za bardzo użyteczne.