【问题标题】:roxygen2 + cygwin + default parameter = truncated `\usage` sectionroxygen2 + cygwin + 默认参数 = 截断的 `\usage` 部分
【发布时间】: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。


更新:

这似乎发生在任何带有默认参数的函数上。


我已将其归结为一个可重现的示例,并尽可能精简以隔离问题:

  1. 来自 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')
    
  2. 修改 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 )
    }
    
  3. 运行 R 并生成文档:

    library(roxygen2)
    roxygenise('test')
    
  4. 查看生成的 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 中的一个错误。
  • 您能否将您的结果写成答案(而不是编辑问题)。这样我们就可以将问题标记为已回答。
  • 当然。不过,我并没有真正考虑回答的问题,错误仍然存​​在 - 这只是一种解决方法。

标签: r cygwin roxygen roxygen2


【解决方案1】:

不是修复,而是解决方法。

我一直在使用从 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)。这仍然让我可以访问像 makesedgrep 这样的 linux 命令,但让我可以让文档正常工作。

问题仍然存在,Cygwin 中的 Cygwin-R(不是 Cygwin 中的 Windows-R)会导致此错误,但可能不再与 roxygen2 相关。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-03
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 2010-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多