【问题标题】:Create and save R's default codebooks as a pdf创建 R 的默认密码本并将其保存为 pdf
【发布时间】:2012-05-21 13:26:06
【问题描述】:

如果我加载data(mtcars),它会附带一个非常简洁的密码本,我可以使用?mtcars 调用它。

我有兴趣以同样的方式记录我的数据,此外,我还希望将简洁的密码本另存为 pdf。

是否可以保存?mtcars 的“内容”以及它是如何创建的?

谢谢,埃里克

附:我确实读过this thread

更新 2012-05-14 00:39:59 PDT

我正在寻找仅使用 R 的解决方案;不幸的是,我不能依赖其他软件(例如 Tex)

更新 2012-05-14 09:49:05 PDT

非常感谢大家的回答。

阅读这些答案后,我意识到我应该更清楚我的优先事项。因此,这里列出了我对这个问题的优先考虑。

  1. R,我正在寻找一个完全基于 R 的解决方案。
  2. 重现性,即代码本可以成为自动化脚本的一部分。
  3. 可读性,文本应该易于阅读。
  4. 可搜索性,可以用任何标准软件打开并搜索的文件(这就是为什么我认为 pdf 会是一个很好的解决方案,但这被 1 到 3 否决了)。

我目前正在使用 Hmisc 包中的 label() 标记我的变量,最终可能会使用同一包中的 Label() 编写一个 .txt 码本。

【问题讨论】:

  • 我不知道您可以在数据集 +1 上查找让我意识到这一点的问题。
  • 创建一个包含您的数据集的包将允许您拥有与 mtcars 相同的功能。这是你感兴趣的吗?
  • @Dason,我有兴趣找到一个仅使用 R 的解决方案,它使我能够自动创建数据码本(每当我从数据库中提取数据时)。我优先考虑将一个简单的软件设置为格式化的 pdf 输出,当我看到 mtcars 附带的文档时,我可能过于乐观了。如果我无法创建 pdf,我会缩减并简单地创建一个 .txt 文件,可能使用 Hmisc 包中的 Label()
  • @Eric,你说的密码本到底是什么意思?

标签: r pdf documentation


【解决方案1】:

(我不完全确定你在追求什么,但是):

  • 与其他软件包文档一样,mtcars 的文件是一个 .Rd 文件。您可以将其转换为除 pdf 之外的其他格式 (ASCII),但生成 pdf 的常用方法确实使用 pdflatex。

  • 但是,此类 .Rd 文件中的大多数信息或多或少都是手工编写的(除非您使用另一个 R 包,如 roxygen/roxygen2 帮助您自动生成其中的一部分。

    李>
  • 对于用户数据,通常 Noweb 更方便。
    .Rnw -Sweave-> -> .tex -pdflatex-> pdf 无疑是此类文件最常用的方式。 但是,您可以使用它,例如使用 Openoffice(如果已安装)或使用纯 ASCII 文件而不是 TeX。

  • 查看包knitr,使用纯ASCII 文件可能更容易。 (我不是专家,只是从Sweave转过来的)

  • 如果 html 是一个选项,Sweaveknitr 都可以使用它。

【讨论】:

  • 感谢您回答我的问题。如果我不清楚,我很抱歉。我为我的问题添加了另一个更新。如果您有任何问题或仍不清楚,请告诉我。谢谢,埃里克
  • @EricD.Brean:我猜对了,您是在自动生成报告之后吗?如果是这样,并且您真的无法使用外部软件做任何事情,恐怕您将不得不坚持使用某种 .txt。 R ratehr 与en.wikipedia.org/wiki/Unix_philosophy...
  • 谢谢,我尊重这一点。我更喜欢does one thing and does it well 的软件。谢谢,埃里克
【解决方案2】:

我不知道如何获取单个数据集的 pdf,但您可以使用以下方法从 LaTeX 版本构建整个 datasets 包的 pdf:

path <- find.package('datasets')
system(paste(shQuote(file.path(R.home("bin"), "R")),"CMD", 
    "Rd2pdf",shQuote(path)))

我不确定这一点,但只有拥有某种 LaTeX 程序(如 MikTex)才有意义。此外,我不确定这将如何在不同的操作系统上运行,因为我的是 windows,这对我有用。

PS 这只是您问题的部分答案,因为您想为您的数据执行此操作,但如果没有别的,它可能会让球滚动。

【讨论】:

  • 谢谢你的回答,问题是我需要写一些我的教授(和我们实验室的其他人)可以在不需要安装 Tex 的情况下使用的东西。我也许应该在我最初的帖子。
  • @Tyler -- 如果你设置了一个可以工作的 LaTeX 系统,你可以通过做,例如,help(mtcars, help_type="pdf") 来获得单个数据集的 pdf。
  • 嗯,很有趣。不知道那个。看来这个问题的答案是你的答案和 Dason 的结合。 Eric 不想让他的同事使用 Tex 程序,但他可以自己创建 PDF 并分发它们,也许通过 Dropbox 进行更新。
  • @Eric,您可以在任何 .Rd 文件上执行 R CMD Rd2pdf。因此,如果您为数据集创建这样的文件(例如,基于 R 源代码中的 mtcars.Rd 文件),您可以将 @Tyler 的答案中的 path 替换为 .Rd 文件的路径。再次,假设您手头有一个可用的 TeX 系统。
  • @Carl,Rd2pdf 文档的最后引用了“编写 R 扩展”手册。有问题的章节包含这两个有点神秘的句子:“所有 [Rd 转换功能] 在 Windows 下工作。您可能需要安装工具以从源代码构建包,如“R 安装和管理”手册中所述,尽管通常所需要的只是一个 LaTeX 安装。”
【解决方案3】:

输入?mtcars 时显示的帮助页面是从一个 .Rd 文件生成的,该文件是一个类似 LaTeX 的文件,用于所有 R 的帮助页面。尽管 .Rd 文件与 LaTeX 类似,但您实际上并不需要知道 LaTeX 来读取或写入它们。实际的 mtcars.Rd 文件可在此处获得:http://commondatastorage.googleapis.com/jthetzel-public/mtcars.Rd,可以使用任何文本编辑器查看。

包的./man 目录中包含的.Rd 文件在安装包时会转换为.html 文件。它们由“工具”包中的函数转换。如果您希望为您的数据集提供?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 包中的数据”。

编辑

如果您想将包中的 .Rd 文件转换为 .pdf,您可以在构建包时执行此操作,但您需要 LaTeX 编译器。如果您使用的是 Windows,请参阅此处:http://cran.r-project.org/bin/windows/Rtools/

【讨论】:

  • Rtools 是否包含 Latex 编译器?我认为您仍然需要安装 MikTeX 才能构建 pdf。
  • @PaulHiemstra:不,它没有。您需要 Rtools 链接中讨论的 MikTeX 之类的东西。
【解决方案4】:

您不能仅使用 R 创建 PDF;您需要使用其他创建 PDF 的软件。

您可以结合使用utils::promptDatatools::Rd2HTML 和一个简单的自定义函数在用户浏览器中打开创建的 HTML 文件。

只制作一个包含您的数据集的包可能会更容易。以“数据集”包为例。

【讨论】:

  • 感谢您回答我的问题。对于 R 生成 pdf 文件的能力,我可能过于乐观了。显然这是不可能的,正如我在上面的第二次更新中所写,我正在寻找仅基于 R 的解决方案。也许 HTML 文件会是一个很好的解决方案。谢谢,埃里克
【解决方案5】:

看起来,如果你想生成一个 pdf,总是需要像 LaTeX 这样的外部工具。我建议使用简单的 ASCII 文本格式来生成这样的文件。原则上,.Rd 文件也是 ASCII 文本,但我发现它们的可读性并不高。

相反,我建议使用纯文本 ASCII 格式,例如 Markdown(例如在 StackOverflow 上使用)来编写文本文件。这样的文件已经比 .Rd 格式的文件更具可读性,而且如果您以后选择这样做,它可以很容易地被处理成 PDF。我认为knitr 包能够从 Markdown 源生成 PDF 文件。此外,knitr 允许您在 Markdown 文本中混入 R 代码。可以评估此​​代码并将结果(偶数)添加到生成的 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 文件即可,无需任何外部工具。请参阅this post on SO 了解如何将文本转储到文件中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-18
    • 1970-01-01
    • 2011-12-23
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多