Создание и сохранение R-кодов по умолчанию в формате pdf
Если я загружаю data(mtcars)
, он поставляется с очень аккуратной кодовой книгой, которую я могу вызвать с помощью ?mtcars
.
Мне интересно документировать мои данные таким же образом и, кроме того, сохранять эту аккуратную кодовую книгу как pdf.
Можно ли сохранить "контент" ?mtcars
и как он создан?
Спасибо, Эрик
P.S. Я прочитал этот поток.
update 2012-05-14 00:39:59 PDT
Я ищу решение, используя только R; к сожалению, я не могу полагаться на другое программное обеспечение (например, Tex)
обновление 2012-05-14 09:49:05 PDT
Большое спасибо всем за много ответов.
Читая эти ответы, я понял, что должен сделать мои приоритеты более ясными. Поэтому здесь приведен список моих приоритетов в отношении этого вопроса.
- R, я ищу решение, основанное исключительно на R.
- Воспроизводимость, что кодовая книга может быть частью автоматизированного script.
- Считываемость, текст должен быть легко читаемым.
- Поисковая система, файл, который можно открыть с помощью любого стандартного программного обеспечения и искать (вот почему я думал, что pdf будет хорошим решением, но это отменено с 1 по 3).
В настоящее время я помещаю свои переменные, используя label()
из пакета Hmisc, и может закончиться написанием кодовой книги .txt с помощью label()
из того же пакета.
Ответы
Ответ 1
(Я не совсем уверен, что вам нужно, но):
-
Как и в других документах пакета, файл для mtcars
является файлом .Rd. Вы можете преобразовать его в другие форматы (ASCII), чем PDF, но обычный способ создания pdf файла использует pdflatex.
-
Однако большая часть информации в таком файле .Rd написана более или менее вручную (если вы не используете еще один R-пакет, такой как roxygen/roxygen2, вы можете автоматически генерировать его части.
-
Для пользовательских данных, как правило, Noweb намного удобнее.
.Rnw -Sweave- > → .tex -pdflatex- > pdf, безусловно, самый обычный способ с такими файлами.
Однако вы можете использовать его, например. с Openoffice (если он установлен) или использовать его с обычными файлами ASCII вместо TeX.
-
Посмотрите на пакет knitr
, который может быть проще с файлами pure-ASCII. (Я не эксперт, просто переключись с Sweave
)
-
Если html является опцией, обе функции Sweave
и knitr
могут работать с этим.
Ответ 2
Я не знаю, как получить pdf отдельных наборов данных, но вы можете построить pdf всего пакета datasets
из версии LaTeX, используя:
path <- find.package('datasets')
system(paste(shQuote(file.path(R.home("bin"), "R")),"CMD",
"Rd2pdf",shQuote(path)))
Я не уверен в этом, но имеет смысл только иметь какую-то программу LaTeX, такую как MikTex. Также я не уверен, как это будет работать на разных ОС, поскольку мои окна - это работает для меня.
PS это лишь частичный ответ на ваш вопрос, поскольку вы хотите сделать это для своих данных, но если ничего другого не может заставить мяч катиться.
Ответ 3
Страница справки, отображаемая при вводе ?mtcars
, создается из файла .Rd, который является LaTeX-подобным файлом, который используется для всех страниц справки R. Хотя .Rd файлы похожи на LaTeX, вам не нужно знать LaTeX, чтобы читать или писать. Фактический файл mtcars.Rd можно найти здесь: http://commondatastorage.googleapis.com/jthetzel-public/mtcars.Rd, который можно просмотреть с помощью любого текстового редактора.
. Файлы RD, входящие в каталог. /man пакета, преобразуются в файлы .html при установке пакета. Они преобразуются функциями в пакет "tools". Если вы хотите использовать такие функции, как ?mtcars
для ваших наборов данных, вам нужно будет создать для них пакет. Это может показаться сложным, если вы никогда не создавали пакет раньше, но его достаточно легко изучить и сделаете вас лучшим программистом R. Существует ряд примеров пакетов набора данных только для CRAN, например msProstate: http://cran.r-project.org/web/packages/msProstate/index.html. Попробуйте загрузить источник пакета, чтобы узнать, как он организован.
Для получения дополнительной информации о создании собственных пакетов, написании файлов .Rd и создании пакетов:
http://cran.r-project.org/doc/manuals/R-exts.html, особенно "1.1.5 Данные в пакетах".
Edit
И если вы хотите преобразовать файл .Rd в свой пакет в .pdf, вы можете сделать это при создании своего пакета, но вам понадобится компилятор LaTeX. Если вы находитесь в Windows, см. Здесь: http://cran.r-project.org/bin/windows/Rtools/.
Ответ 4
Вы не можете создать PDF файл только с R; вам нужно использовать другое программное обеспечение, которое создает PDF файлы.
Вы можете использовать комбинацию utils::promptData
, tools::Rd2HTML
и простую пользовательскую функцию для открытия созданного файла HTML в браузере пользователей.
Было бы проще просто создать пакет, содержащий ваши наборы данных. Посмотрите на пакет "набора данных" для примера.
Ответ 5
Похоже, что если вы хотите создать pdf файл, всегда нужен внешний инструмент, такой как LaTeX. Я бы рекомендовал использовать простой текстовый формат ASCII для создания такого файла. В принципе, файлы .Rd также являются ASCII-текстом, но я не считаю их особенно читаемыми.
Вместо этого я бы рекомендовал использовать текстовый формат ASCII, такой как Markdown (который используется, например, для StackOverflow), для записи текстового файла. Такой файл уже более читабельен, чем файл в формате .Rd, и в качестве бонуса его можно легко переработать в PDF, если вы захотите сделать это позже. Пакет knitr
, который, я думаю, способен генерировать PDF файлы из источников Markdown. Кроме того, knitr
позволяет смешивать код R в тексте Markdown. Этот код можно оценить, а результаты (четные цифры) добавлены в полученный PDF.
На практике вы можете использовать sprintf
для генерации векторов символов, которые вы можете подключить к файлу, чтобы динамически генерировать текст уценки. Просто напишите шаблон один раз и отметьте места для текста, который вы хотите добавить позже, следующим образом:
base_text = "
First header
============
This document was generated on %s, by %s.
"
text_forfile = sprintf(text, some_date, some_name)
Просто выгрузите текст в text_forfile
в файл .md
и сделайте это, никаких внешних инструментов не потребуется. См. этот пост в формате SO о том, как выпустить текст в файл.