Что такое аккуратная командная строка, эквивалентная RStudio Knit HTML?

Что такое аккуратная командная строка, эквивалентная RStudio Knit HTML? Учитывая файл .Rmd, вы можете использовать RStudio для вязания файлов .html, .docx и .pdf с помощью Knitr. Было бы здорово полностью перевести этот процесс в командную строку. Мой подход до сих пор:

Rscript -e "library(knitr); knit('test.Rmd')"  # This creates test.md
pandoc test.md >> test.html

Это отлично работает, но в результате test.html не приходит с тем же самым, что и в RStudio. Любые предложения о том, как лучше всего вставлять .Rmd файлы в .html через командную строку и заканчивать симпатичным .html?

Дополнительный вопрос: что было бы лучшим решением командной строки для .pdf или .docx?

Ответ 1

rmarkdown::render("test.Rmd", "html_document")

Ответ 2

Следуя принятому ответу, я разработал сценарий bash под названием "knitter", который будет делать все необходимое, все, что нужно сделать пользователю, это ввести: ./knitter file.Rmd file.html или ./knitter file.Rmd file.pdf.

Сценарий ниже:

#!/bin/sh

### Test usage; if incorrect, output correct usage and exit
if [ "$#" -gt 2  -o  "$#" -lt 2 ]; then
    echo "********************************************************************"
    echo "*                        Knitter version 1.0                       *"
    echo "********************************************************************"
    echo -e "The 'knitter' script converts Rmd files into HTML or PDFs. \n"
    echo -e "usage: knitter file.Rmd file.{pdf,html} \n"
    echo -e "Spaces in the filename or directory name may cause failure. \n"
    exit
fi
# Stem and extension of file
extension1='echo $1 | cut -f2 -d.'
extension2='echo $2 | cut -f2 -d.'

### Test if file exist
if [[ ! -r $1 ]]; then
    echo -e "\n File does not exist, or option mispecified \n"
    exit
fi

### Test file extension
if [[ $extension1 != Rmd ]]; then
    echo -e "\n Invalid input file, must be a Rmd-file \n"
    exit
fi

# Create temporary script
# Use user-defined 'TMPDIR' if possible; else, use /tmp
if [[ -n $TMPDIR ]]; then
    pathy=$TMPDIR
else
    pathy=/tmp
fi
# Tempfile for the script
tempscript='mktemp $pathy/tempscript.XXXXXX' || exit 1

if [[ $extension2 == "pdf" ]]; then
    echo "library(rmarkdown); rmarkdown::render('"${1}"', 'pdf_document')" >> $tempscript
    Rscript $tempscript
fi
if [[ $extension2 == "html" ]]; then
    echo "library(rmarkdown); rmarkdown::render('"${1}"', 'html_document')" >> $tempscript
    Rscript $tempscript
fi

Ответ 3

Мой более простой сценарий командной строки, похожий на скрипт Тайлера Р.:

В вашем .profile добавьте:

function knit() {
    R -e "rmarkdown::render('$1')"
}

Затем в командной строке введите knit file.Rmd

Я установил выходной формат в заголовке Rmd: output: github_document или аналогичный