Что такое knitr эквивалент R CMD Sweave myfile.rnw
?
Что такое эквивалент knitr `R CMD Sweave myfile.rnw`?
Ответ 1
Общее решение (работает независимо от версии R):
Rscript -e "library(knitr); knit('myfile.Rmd')"
Так как R 3.1.0, R CMD Sweave
начал поддерживать не-Sweave документы (хотя название команды звучит немного странно), и вам нужно всего лишь указать механизм виньетки в вашем документе, например
%\VignetteEngine{knitr::knitr}
Чтобы увидеть возможные двигатели виньет в knitr, используйте
library(knitr)
library(tools)
names(vignetteEngine(package = 'knitr'))
# "knitr::rmarkdown" "knitr::knitr" "knitr::docco_classic" "knitr::docco_linear"
Ответ 2
У меня есть knitme.R script:
library(knitr)
render_html()
source("hooks.R") # mods to defaults
inFile = commandArgs(trailingOnly=TRUE)[1]
outFile = commandArgs(trailingOnly=TRUE)[2]
knit(inFile,output=outFile)
поэтому я могу сделать
Rscript knitme.R $SOURCE $TARGET
Где $SOURCE
и $TARGET
соответствуют требованиям.
Вы могли бы также интегрировать это в Make
, поэтому у вас было правило, что все, что вам нужно было сделать, это:
make myfile.html
и он перейдет к myfile.Rhtml
и создаст файл HTML. Откорректируйте PDF из .Rnw
Я использую его с SCons вместо Make, поэтому у меня есть файл Sconscript, который немного сложнее (отчасти потому, что Я только начал учиться использовать SCons, так что это может быть немного круто)
env=Environment()
bld = Builder(action = '/usr/bin/Rscript knitme.R $SOURCE $TARGET',
suffix='.html',
src_suffix='Rhtml')
env.Append(BUILDERS = {'Knit' : bld})
env.Knit(source='test.Rhtml',target='test.html')
Тогда все, что мне нужно сделать, это:
scons test.html
и я получаю test.html
, построенный из test.Rhtml
, если test.Rhtml
изменился.
Все это часть файла Sconstruct
, который создает весь веб-сайт и копирует его на сервер на основе всех других зависимостей.
Теперь дрейфует не по теме...
Ответ 3
Чтобы добавить к другим ответам, если вы хотите вязать/визуализировать файл и открыть вывод в одной строке, вы можете использовать:
Rscript -e "rmarkdown::render('file.Rmd')" & open file.pdf
Я предпочитаю делать все в одной строке, потому что проще работать как многократно используемая команда Vim.
Вы также можете заменить open
на конкретное приложение, если вы хотите использовать свою систему не по умолчанию. Я обычно использую это, если я нахожусь в Windows и хочу использовать Sumatra для перезаписывания выводимого в настоящее время файла PDF (поэтому мне не нужно забывать закрывать его каждый раз).
Ответ 4
R CMD knit file.Rmd
- это прямой эквивалент R CMD Sweave file.Rmd
В последнее время существуют расширенные функции в rmarkdown и knitr для такого рода грязной работы. Для слайдов я использую заголовок YAML Rmarkdown для обозначения предполагаемого формата вывода, а основная строка командной строки, например
R -e "library(rmarkdown); render(\"file.Rmd\")"