【问题标题】:How to configure RStudio package build to work across multiple machines如何配置 RStudio 包构建以跨多台机器工作
【发布时间】:2014-02-24 22:33:47
【问题描述】:

另一个用户在 RStudio 帮助页面here 上提出了这个问题,但没有得到答复。

基本上,我已经完成了所有步骤:

(1) 已安装的 Xcode

(2) 下载安装的命令行工具

(3) 已安装的 MacTex

(4) 选择包含 R 包的目录以及随附的描述文件。

这个包在我第一次用来构建它的 Mac 上编译得很好。然而,现在我被告知 RStudio 无法检测到 DESCRIPTION 文件,即使它就在构建目录中。我附上了截图。

我得到的错误信息是:

ERROR: The build directory does not contain a DESCRIPTION file so cannot be built as a package.

有人知道我错过了什么吗?我附上了截图供参考。完全披露:这是针对商业应用程序的工作。

【问题讨论】:

  • 我最近也在做一个包。我用 R 和 R 工作室做过的最令人沮丧的事情。第一个问题:您是否设置了工作目录?第二个问题/评论:您的错误可能与乳胶无关,但您是否确认其他乳胶接口(如 LaTeXit 或 Texshop)正常工作?最后一个问题,您是否安装并需要 roxygen2?此外,为了避免将其标记为过于本地化,您可能希望将其更改为“每个人如何配置他们的包构建以便能够在多台机器上工作?”。只是一个想法......
  • 嗨,安迪,伟大的 cmets。我通过了所有这些检查。您建议的所有内容都已检查,除了我不确定您所说的“需要” roxygen2 是什么意思——在我看来,RStudio 会隐式执行此操作,但也许我需要在某处明确说明?另外,改了标题。很好的提示。
  • 对可能经历过类似情况的其他人的快速说明:您可以使用 R CMD build packagedirectory 从 UNIX 命令行直接构建您的包。手动解决方案让我得到了我需要的东西。不过,弄清楚 RStudio 发生了什么还是很不错的。

标签: r rstudio roxygen2


【解决方案1】:

我刚才遇到了这样的错误(除了我之前能够毫无意外地构建包)。

原来我的错误是由格式不正确的说明文件引起的。修复那里的语法允许我的包构建。

【讨论】:

  • 刚刚遇到同样的问题,我学到了“DESCRIPTION 使用简单的文件格式......当值跨越多行时,它们需要缩进”(来自 Hadley Wickham 的 R Packages )
  • 您可以检查这是否可能是 devtools::build() 的问题,它会提供更多信息性错误消息,例如:“Error: Line starting 'foo bar foo bar foo ...' is malformed!
【解决方案2】:

以下是我如何处理这个我们称之为mypack 的包的概要。

更新 R 和 Rstudio

这应该是你做的第一件事。更新所有内容...

创建包骨架

使用roxygen2 包创建mypack 包骨架。在您的 IDE 中,试试这个:

library(roxygen2)
package.skeleton('mypack')

更多详情请见http://cran.r-project.org/web/packages/roxygen2/roxygen2.pdf

编辑描述文件

使用可以让我查看非打印字符的阅读器编辑说明文件。值得检查一下您的文件中是否隐藏了任何奇怪的字符。 RStudio 是一个很好用的编辑器。

将您的DESCRIPTION文件内容与其他人的github存储库for example the plyr description file进行比较。

另外,还有一个相关的问题here 的答案解释了如何使用DESCRIPTION 文件。

构建包

我使用脚本(如下)从 Rstudio 中构建我的包,而不是使用 Rstudio 的预设选项。我不喜欢在通常的 IDE 和某个项目之间切换。

您需要安装 [devtools][3] 才能完成这项工作。

setwd('~/Documents/projects/Rcode')
# remove the old version
try(detach(name = "package:mypack",unload = TRUE))
# load the packages we need for building / documentation
library("roxygen2")  # could use "require"
# generate documentation
roxygenize(package.dir = "mypack")

# now we actually build and install the package
system("R CMD build mypack")
system("R CMD INSTALL --preclean mypack_1.00.tar.gz")
system("R CMD check mypack")
# check for old documentation
try(file.remove(file.path(getwd(),"mypack.pdf")))
# generate new documentation
system("R CMD Rd2pdf mypack")
# and finally, make it available.
library("mypack")

免责声明:我完全清楚上述某些内容的顺序可能有误,或者在做一些愚蠢的事情。我只是不确定是什么,它目前有效。

创建包文档

我在所有函数的标题中都有 R-markdown,因此当我执行此脚本时,帮助文件会自动创建为 ./man/*.Rd(其中 * 是函数名称)。再一次,看看 plyr github 来感受一下。

我还为这个包写了一个小插曲。这是一个 .Rnw 文件,可以在 Rstudio 或任何其他文本编辑器中进行编辑。 .Rnw 文件基本上是带有嵌入式 knitr 块的乳胶。 Rstudio 的编辑器可以选择独立于包本身进行编译。这似乎是一个很好的解决方案,并且每当我更新我的代码时,上面的脚本都会重新编译小插图,这是对所有内容的一个很好的检查。

跨平台安装

我知道这个脚本可以在多个 Mac 上运行,但从来没有遇到过不得不使用 Windows 机器编译的不幸。不过,我的一个同事在 windows 上使用编译包没有任何问题。

资源

对此有用的资源包括:

【讨论】:

    【解决方案3】:

    我最近遇到了完全相同的问题 - 我的包无法在 RStudio 下编译,并显示包目录不包含DESCRIPTION文件的错误。我通过将DESCRIPTION文件的编码更改为ANSI来解决了这个问题。

    【讨论】:

    • 您可以通过以下方式检查非 ASCII 字符:tools::showNonASCIIfile("DESCRIPTION")
    【解决方案4】:

    变化:

    描述:第一行

             Line2 
    
             Line3.
    

    收件人:

    描述:Line1 Line2 Line3.

    它会起作用的!

    【讨论】:

    • 为什么会这样?在您的描述中有换行符应该不是问题。请参阅here 以获取教科书的解释,例如here 一个真实的例子。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-30
    • 2012-06-16
    • 2012-06-27
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    相关资源
    最近更新 更多