У меня есть файл .Rnw, содержащий фрагменты кода R и команды LaTeX. До сих пор я разрабатывал и тестировал этот код в Rstudio: щелкнул «compile PDF», чтобы получить некоторые выходные файлы и сгенерированный файл PDF.
Теперь я хотел бы использовать commandArgs (), чтобы дать моему .Rnw один единственный аргумент: файл YAML. Этот файл содержит все виды параметров, которые необходимы для сценария.
Чтобы дать некоторый контекст:
Мой сценарий .Rnw является конвейерным сценарием, который был разработан как можно более универсальным.
Мой сценарий .Rnw требует каждый раз несколько параметров - они будут разными в каждом проекте. Чтобы предоставить эти параметры, я в настоящее время (уже) использую файл конфигурации YAML. Это означает, что первое, что делает мой скрипт .Rnw, это импорт файла YAML, а затем он начинает что-то делать.
Моя проблема: могу ли я использовать "Rscript", "commandArgs ()" и knitr все вместе. Я надеялся, что мой addind некоторые commandArgs () к моему сценарию .Rnw, я смогу запустить все (т.е. дать аргумент в командной строке для предоставления файла YAML и компилировать PDF), например так:
Rscript script.Rnw params.yaml
Тем не менее, я получаю эту ошибку о "\", что, я сильно подозреваю, связано с тем фактом, что я использую файл .Rnw (и самое первое, что в нем - команда LaTeX). Затем я увидел потенциальное решение на других постах, таких как:
Rscript -e "library(knitr); knit('script.Rnw')"
pdflatex script.tex
Однако, это также терпит неудачу - неудивительно, что я полагаю, потому что я не дал ему мой файл конфигурации YAML.
Я понимаю, что мой дизайн, скорее всего, ошибочен: используя вместе команды commandAgrs () И knitr, я все усложняю. Я также понимаю, что knitr, возможно, не был действительно разработан для создания отчетов для сценариев, которые используются в качестве конвейеров (по крайней мере, это мое впечатление). Причина, по которой я хочу его использовать, заключается в том, что для каждого проекта можно создать быстрый PDF со всеми результатами.
Буду признателен за любой совет. Вот пример моего кода:
\documentclass[12pt, a4paper]{article}
\usepackage[utf8]{inputenc}
\usepackage{hyperref}
\hypersetup{
colorlinks = true, %Colours links instead of ugly boxes
urlcolor = blue, %Colour for external hyperlinks
linkcolor = blue, %Colour of internal links
citecolor = blue %Colour of citations
}
\usepackage{caption}
\setlength{\parindent}{0pt}
\usepackage{authblk}
\usepackage[nomarkers, nolists]{endfloat} %Positions figures at the end of the document and add no list of names (requires that chunk have fig.cap option)
\usepackage{soul} % Allows underline lines to be broken (use \ul{} instead of \underline{})
\usepackage{helvet} %Set up Arial as font
\renewcommand{\familydefault}{\sfdefault}
\newcommand{\Rfunction}[1]{{\texttt{#1}}}
\newcommand{\Rpackage}[1]{{\textit{#1}}}
\title{\textbf{Report}}
\author{Author}
\date{\today}
\begin{document}
\maketitle
\begingroup
\hypersetup{linkcolor=black} % force independent link colours in table of contents
\tableofcontents
\endgroup
\begingroup
\hypersetup{linkcolor=black} % force independent link colours in list of figures
\listoffigures
\endgroup
\newpage
\section{Introduction}
This report blah blah blah
\newpage
\section{Results}
<<importing-lib, echo=FALSE, message=FALSE, cache=TRUE>>=
###################################################
# Obtain command-line YAML file and set directory #
###################################################
#!/usr/bin/env Rscript
args= commandArgs(trailingOnly=TRUE)
if (length(args) == 0) {
stop("this script requires a configuration file (.yaml) as input")
} else if (length(args) > 1) {
stop("this script requires only one input: a configuration file (.yaml)")
}
params <- yaml.load_file(args[1])
setwd(params$workdir)
if (dir.exists(file.path(params$workdir, "results")) == FALSE) {
dir.create(file.path(params$workdir, "results","edgeR"), recursive = TRUE)
dir.create(file.path(params$workdir, "results", "gsea", "input_files"), recursive = TRUE)
}
print("Hello!")
@
\end{document}