我有一个我一直在 Linux 下开发的 R 包,我在 Windows 下测试它的可怕时刻已经到来。
文档是使用 roxygen 完成的,我正在使用 cygwin 构建包。
问题是,当 I 时roxygenise('test-package')
,roxygen 将\usage
文档的部分截断为一个字符。它对我的一些但不是全部功能执行此操作,我无法弄清楚模式。
在 Linux 或 Windows 下运行相同的命令(即从 R 提示符)时不会发生这种情况roxygenise('test-package')
- 只是 Windows 下的 Cygwin(使用 R devtools + Windows 的命令提示符对我来说不是一个选项 - 它是 Makefiles 大项目的一部分ETC)。
在所有情况下,我都使用 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!)。