使用roxygen2构建包时会出现“意外的END_OF_INPUT”

时间:2014-05-29 10:50:45

标签: r roxygen2

我试图发布this package,但它在构建时仍然失败。

我在buildcheck中都有相应的变体:

Warning: /tmp/RtmpUUrH6N/Rbuild51f35b160bfe/taRifx.geo/man/interpolateAndApplyWithinSpatial.Rd:66: unexpected END_OF_INPUT '

我已将问题追溯到@examples interpolateAndApplyWithinSpatial()中的一行:

#' \dontrun{
#' require(fields)
#' require(rgdal)
#' distanceMatrix <- function( points1, points2, dist.fn=rdist.earth ) {
#'  cat( "Generating distance matrix for ",length(points1)," by ", length(points2), " matrix.\n" )
#'  if(!is.na(proj4string(points1)))  points1 <- spTransform( points1, CRS("+proj=longlat +datum=WGS84") )
#'  if(!is.na(proj4string(points2)))  points2 <- spTransform( points2, CRS("+proj=longlat +datum=WGS84") )
#'  ##PROBLEMATIC LINE HERE##
#' }
#' } # end of dontrun

##PROBLEMATIC LINE HERE##最初是dist.fn( points1@coords, points2@coords ),导致包构建错误消息。

如果我注释掉dist.fn( points1@coords, points2@coords ),它仍会返回错误消息。如果我将代码复制并粘贴到控制台中,它就会运行。我试过手动重新打字,所以我确定那里没有有趣的角色,但它仍然失败。

生成的.Rd文件似乎省略了@之后的所有内容,只留下了一些}短:

\examples{
# Not run because too time-consuming
\dontrun{
require(fields)
require(rgdal)
distanceMatrix <- function( points1, points2, dist.fn=rdist.earth ) {
 cat( "Generating distance matrix for ",length(points1)," by ", length(points2), " matrix.\\n" )
 if(!is.na(proj4string(points1)))  points1 <- spTransform( points1, CRS("+proj=longlat +datum=WGS84") )
 if(!is.na(proj4string(points2)))  points2 <- spTransform( points2, CRS("+proj=longlat +datum=WGS84") )
 dist.fn( points1
}

我最好的猜测是roxygen2@coords解释为roxygen2指令。是对的吗?如果是这样,我该如何解决?短期修复是为coords插槽编写一个访问器函数并使用它,我猜。

1 个答案:

答案 0 :(得分:3)

符号@在Roxygen中具有特殊含义。因此,如果您需要在Roxygen示例代码中使用@(或者在任何Roxygen字段中),则需要将其替换为@@

因此,Roxygen段:

#' @examples
#' dist.fn( points1@@coords, points2@@coords )

将转换为R手册页中的以下代码:

dist.fn( points1@coords, points2@coords )

请注意,在这种情况下,您可以将points1@coords替换为coordinates(points1),如评论中所示。但是,这可能并不总是可行,这取决于是否存在索引S4类对象中的插槽的方法。