Неожиданный "неожиданный END_OF_INPUT" при создании пакета с roxygen2

Я пытаюсь освободить этот пакет, но он продолжает сбой при сборке.

Я получаю вариации на этом как в build, так и check:

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 ответ

Символ @ имеет особое значение в Roxygen. Поэтому, если вам нужно использовать @ в вашем примере кода Roxygen (или в любом поле Roxygen, если на то пошло), вам нужно заменить его на @@.

Таким образом, сегмент Roxygen:

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

Будет переведен на следующий код на страницах R man:

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

Обратите внимание, что в этом случае вы можете заменить points1@coords на coordinates(points1), как это отмечено в комментариях. Однако это не всегда возможно, в зависимости от того, существует ли метод для индексации слота в объекте класса S4.

licensed under cc by-sa 3.0 with attribution.