Поместите рисунок непосредственно в документ Knitr (не сохраняя его файл в папке). Часть 2

Я расширяю вопрос, который недавно опубликовал здесь ( поместите рисунок прямо в документ Knitr (не сохраняя его файл в папке)).

Я пишу пакет R, который генерирует файл.pdf для пользователей, который выводит обобщения данных. У меня есть скрипт.Rnw в пакете (здесь мой MWE называется test.Rnw). Пользователь может сделать:

1) knit("test.Rnw") to create a test.tex file
2) "pdflatex test.tex" to create the test.pdf summary output file.

Файл.Rnw генерирует много изображений. Первоначально все они были сохранены в текущем каталоге. Эти изображения, сохраняемые в каталоге (или, может быть, файлы.aux или.log, которые создаются при вызове pdflatex для файла.tex), выглядят не так аккуратно, как могли бы (поскольку пользователи должны помнить об удалении этих файлов изображений), Во-вторых, я также беспокоюсь о том, что эта неопрятность может вызвать проблемы при многократном запуске скриптов.

Итак, в моем предыдущем посте мы улучшили файл.Rnw, сохранив изображения во временную папку. Мне сказали, что файлы во временной папке удаляются каждый раз, когда открывается новый R-сеанс. Тем не менее, я все еще беспокоюсь о некоторых вещах:

1) Я чувствую, что мне может понадобиться вставить строку, например, строку 19:

system(sprintf("%s", paste0("rm -r ", temppath, "/*")))

автоматически удалять файлы во временной папке каждый раз при запуске файла.Rnw (чтобы изображения не только удалялись при каждом перезапуске R). Это сохранит текущий каталог чистым от изображений, и пользователю не нужно будет забывать вручную удалять изображения. Однако я не знаю, будет ли это "решение" соответствовать стандартам CRAN, чтобы иметь строку для удаления файлов во временной папке. Причина в том, что он удаляет файлы в системе пользователя, что может вызвать проблемы, если другие программы записывают файлы во временную папку. Мне кажется, я читал о том, что CRAN не позволяет записывать / удалять файлы с компьютера пользователя по понятным причинам. Насколько строгим будет CRAN в отношении такой практики? Есть ли безопасный способ сделать это?

2) Если запись и удаление файлов изображений во временном файле не будет работать, как еще можно добиться того же эффекта (запустить сценарий, не создавая громоздких файлов изображений, созданных в папке)? Возможно ли вместо этого встроить изображения непосредственно в выходной файл (не нужно сохранять его в каком-либо каталоге)? Я уверен, что это невозможно. Однако мне сказали, что это можно сделать с помощью.Rmd и что я могу преобразовать свой.Rnw в.Rmd. Это может быть сложно, поскольку файл.Rnw должен соответствовать определенным форматам (текст и поля) для правильного вывода, и он очень длинный. Можно ли использовать возможность.Rmd (вставлять изображения непосредственно в вывод) только для блоков, которые генерируют изображения, без перезаписи всего файла.Rnw?

Ниже мой MWE:

\documentclass[nohyper]{tufte-handout}
\usepackage{tabularx} 
\usepackage{longtable}

\setcaptionfont{% changes caption font characteristics
  \normalfont\footnotesize
  \color{black}% <-- set color here
}

\begin{document}

<<setup, echo=FALSE>>=
library(knitr)
library(xtable)
library(ggplot2)
# Specify directory for figure output in a temporary directory
temppath <- tempdir()
# Erase all files in this temp directory first?
#system(sprintf("%s", paste0("rm -r ", temppath, "/*")))
opts_chunk$set(fig.path = temppath)
@

<<diamondData, echo=FALSE, fig.env = "marginfigure", out.width="0.95\\linewidth", fig.cap = "The diamond dataset has varibles depth and price.",fig.lp="mar:">>=
print(qplot(depth,price,data=diamonds))
@

<<echo=FALSE,results='asis'>>=
myDF <- data.frame(a = rnorm(1:10), b = letters[1:10])
print(xtable(myDF, caption= 'This data frame shows ten random variables from the distribution and a corresponding letter', label='tab:dataFrame'), floating = FALSE, tabular.environment = "longtable", include.rownames=FALSE)
@

Figure \ref{mar:diamondData} shows the diamonds data set, with the
variables price and depth.Table \ref{tab:dataFrame} shows letters a through j
corresponding to a random variable from a normal distribution.

\end{document}

0 ответов

Другие вопросы по тегам