web-dev-qa-db-ja.com

RStudioのKnit HTMLに相当するコマンドラインとは何ですか?

RStudioのKnit HTMLに相当するコマンドラインとは何ですか? .Rmdファイルを指定すると、RStudioを使用して、Knitrを使用して.html.docx、および.pdfファイルを編成できます。このプロセスを完全にコマンドラインに移行することは素晴らしいことです。これまでの私のアプローチ:

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

これは正常に動作しますが、結果のtest.htmlには、RStudioの場合と同じようにかなりの改造が施されていません。コマンドラインを使用して.Rmdファイルを.htmlに最適に編成し、きれいな.htmlを作成する方法

追加の質問:.pdfまたは.docxに最適なコマンドラインソリューションは何ですか?

22
elke
rmarkdown::render("test.Rmd", "html_document")
45
George Dontas

Tyler R.に似た、より簡単なコマンドラインスクリプト:

.profileに以下を追加します:

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

次に、コマンドラインでknit file.Rmdと入力します

Rmdヘッダーに出力形式を設定します:output: github_documentまたは類似

6
Paul

受け入れられた回答のフォローアップとして、必要なすべてを実行する「knitter」と呼ばれるbashスクリプトを作成しました。ユーザーが実行する必要があるのは、./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
5
Tyler R.