什么是相当于RStudio的Knit HTML的简洁命令行?

elk*_*lke 21 r rstudio knitr r-markdown

什么是相当于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
Run Code Online (Sandbox Code Playgroud)

这样可以正常工作,但结果test.html并没有像在RStudio中那样漂亮.任何建议如何通过命令行最好地编织.Rmd文件.html,并最终得到漂亮.html

额外的问题:什么是最好的命令行的解决方案.pdf.docx

Geo*_*tas 42

rmarkdown::render("test.Rmd", "html_document")
Run Code Online (Sandbox Code Playgroud)

  • 太好了,这个有效!完整的命令行命令是:`Rscript -e'库(rmarkdown); rmarkdown :: render("/ path/to/test.Rmd","html_document")'` (12认同)
  • 更短的 shell 命令,基于 @elke 上面的精彩评论,使用默认输出格式并删除库调用(与 `::` 冗余) `Rscript -e "rmarkdown::render('test.Rmd')"` (2认同)

Tyl*_* R. 8

跟进接受的答案,我起草了一个名为“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
Run Code Online (Sandbox Code Playgroud)

  • 有一个脚本是个好主意。不幸的是,您的脚本有一些错误(例如,第二个参数是必需的,但基本上被忽略 - 只考虑文件扩展名;脚本需要 `bash`,但以 `!/bin/sh` 等开头),所以我创建了一个[更正版本](https://gist.github.com/ximeg/9d1a2d543c8959725b1c9bace196efd5)。现在第二个参数指定输出格式。 (2认同)

Pau*_*aul 7

我更简单的命令行脚本,类似于 Tyler R. 的:

在您的.profile或类似的,添加:

function knit() {
    R -e "rmarkdown::render('$1')"
}
Run Code Online (Sandbox Code Playgroud)

然后在命令行输入 knit file.Rmd

编辑:对于很好的自动完成,请参阅评论

我在 Rmd 标头中设置了输出格式:output: github_document或类似的

  • @baxx 我使用 bash,所以我在“.bashrc”而不是“.profile”中添加了一些内容。我添加了“complete -f -X '!*.Rmd' knit”。参见示例:https://github.com/Freguglia/dotfiles/blob/d0be8c1b4f68af0605bac438c31ec98792e4aa0f/.bashrc#L97 (4认同)