【发布时间】:2012-03-24 15:35:19
【问题描述】:
我有一个 R 包,我一直在 Linux 下开发,我在 Windows 下测试它的可怕时刻已经到来。
文档是用roxygen做的,我是用cygwin来构建包的。
问题是,当我 roxygenise('test-package') 时,roxygen 会将文档的 \usage 部分截断为一个字符。它对我的一些但不是所有功能都这样做,我无法弄清楚这种模式。
在 Linux 或 Windows 下运行相同的命令(即 R 提示符下的 roxygenise('test-package'))时不会发生这种情况 - 只是 Windows 下的 Cygwin(使用 R devtools + Windows 中的命令提示符对我来说不是一个选项 - 它是一部分一个大项目的 Makefile 等)。
在所有情况下,我都使用 roxygen v2.2.2。
更新:
这似乎发生在任何带有默认参数的函数上。
我已将其归结为一个可重现的示例,并尽可能精简以隔离问题:
-
来自 R:
# this function used to trim strings, but I've stripped it right down # to eliminate it as a cause of the problem trim <- function(x='asdf') { return( x ) } package.skeleton('test') -
修改
trim.R(在 test/R 中)并将以下 roxygen 添加到顶部,因此文件如下所示:#' trim white spaces from a string #' #' @param x string or vector of strings to trim #' @return x trimmed. #' @export trim <- function(x='asdf') { return( x ) } -
运行 R 并生成文档:
library(roxygen2) roxygenise('test') -
查看生成的
trim.Rd文件(在 test/man 中):\name{trim} \alias{trim} \title{trim white spaces from a string} \usage{ t } \arguments{ ... # rest of .Rd file - nothing wrong here.
看看怎么只有\usage{t} ??
当然,当运行R CMD check 时,会收到关于\usage 中未出现的记录参数的错误,但这是因为\usage 被截断了。
有谁知道为什么会发生这种情况以及我该如何解决? roxygen2 中的某些东西可能依赖于在 Mac、Windows 和 Linux 中运行但不适用于 Cygwin 的东西?
干杯(为此我一直在扯头发)。
更新 #2:
我一直在使用从 Cygwin 的包管理器安装的 R,而不是我的 Windows R(即C:/Program Files/R/R-2.14.2/bin 中的那个) - 我没有意识到 Windows R 可以在 Cygwin 下运行。
如果我在 Cygwin 中使用 Windows R,该错误就会消失。如果我在 Cygwin 中使用 Cygwin R,则存在该错误。
我只能假设这是一些与 Cygwin R 相关的错误,而不是 roxygen2。
现在我将使用在 cygwin 中使用 Windows R 的解决方法(事实上,现在我知道我可以做到这一点,反正也不需要 Cygwin R!)。
【问题讨论】:
-
我从未见过
roxygen2的这种行为,但我也没有使用roxygenise。相反,我在包devtools中使用document()- 这使用了roxygenise,但这一步是隐藏的。无论如何,我的设置看起来和你的一样:Windows 7 + CygWin + roxygen2 v2.2.2。你有我的同情,但遗憾的是我不能提供建议。 -
我快速浏览了 roxygen2 源代码,但看不到任何明显的原因(如
system调用) - 可能是编码??!!我会试试devtools看看我是否遇到同样的问题。在我意识到只有在 Cygwin 中我有这个问题之前,我确实花了很长时间认为我在标记中犯了一个错误。 -
啊哈!我与 Bill Venables (!) 进行了一次交谈,他让我了解到您实际上可以在 cygwin 中运行您的 Windows R(即
Program Files/R/R-2.14.2/bin中的那个)。我一直在使用你从 cygwin 的包管理器中获得的 R。瞧,使用 Windows R 的作品。因此,与 roxygen2 相比,这可能是 cygwin 的包管理器中的 R 中的一个错误。 -
您能否将您的结果写成答案(而不是编辑问题)。这样我们就可以将问题标记为已回答。
-
当然。不过,我并没有真正考虑回答的问题,错误仍然存在 - 这只是一种解决方法。