Ошибка roxygen2: ошибка в начале блока roxygen... @data - неизвестный ключ
После недавнего обновления до R 3.1.1, то, что раньше давало мне предупреждение со старой версией R, теперь выдает эту ошибку при использовании devtools::document в RStudio (Ctrl + Shift + D):
==> devtools::document(roclets=c('rd', 'collate', 'namespace'))
Updating spectrometry documentation
Loading spectrometry
First time using roxygen2 4.0. Upgrading automatically...
Error: Failure in roxygen block beginning sphereLeafReflectance.R:1
@data is an unknown key
Execution halted
Exited with status 1.
Я погуглил и прочитал документацию для roxygen2, но не нашел решения своей проблемы. @data - это слот из класса во внешнем пакете ("hyperSpec"), от которого наследуются классы в моем пакете. Вот файл psr3500Spec.R, определяющий мой класс:
#' Constructor for objects of type 'psr3500Spec'
#'
#' @title psr3500Spec class definition
#' @aliases psr3500Spec
#' @param file Character. Filename of a valid .sed file. Mandatory
#' @param datatype Character. Type of spectral data to add to object. Possible
#' values are: RadRef/RadTarget/Reflect. Mandatory
#' @return psr3500Spec object, inheriting from 'hyperSpec' object
#' @export
psr3500Spec <- setClass("psr3500Spec", representation(datatype = "character"),
contains = "hyperSpec")
#' Initialize method for objects of type 'psr3500Spec'
#'
#' @keywords internal
setMethod("initialize", "psr3500Spec",
function(.Object, ..., file = character(), datatype = character()) {
if(nargs() > 1) {
if(!(file.exists(file)))
stop("Not a valid SED file")
if (!(datatype %in% c("RadRef", "RadTarget", "Reflect")))
stop("Not a valid datatype. Possible values are: RadRef/RadTarget/Reflect")
data <- readSedData(file)
meta <- readSedMetadata(file)
meta$datatype <- datatype
meta$FileName <- file
di <- grep(datatype, names(data))
wi <- grep("Wvl", names(data))
.Object <- callNextMethod(.Object, data = meta,
spc = matrix(data[, di], nrow = 1), wavelength = data[, wi])
switch(datatype,
"RadRef" = {
spclab <- paste0("Reference Radiance (", meta$Units, ")")
},
"RadTarget" = {
spclab <- paste0("Target Radiance (", meta$Units, ")")
},
"Reflect" = {
spclab <- "Reflectance [unitless]"
}
)
.Object@label <- list(.wavelength = paste0("Wavelength (nm)" ),
spc = spclab)
return(.Object)
} else {
.Object <- callNextMethod(.Object, ...)
return(.Object)
}
})
В функции sphereLeafReflectance
Я получаю доступ к слоту @data объекта hyperSpec: возможно, именно это и вызывает проблему. Я не знаю, почему сообщение об ошибке указывает на то, что проблема в строке 1 этой функции, так как документация находится в этой строке:
#' Integrating sphere leaf reflectance
#'
#' Calculates leaf reflectance from radiance measurements made with an
#' integrating sphere, removing the contribution from the measured stray light
#'
#' @param Fsr psr3500Spec object. Radiance of a target (leaf) on the sample port
#' of the sphere measured in reflectance mode
#' @param Fsw psr3500Spec object. Radiance of a reference surface measured in
...
Пакет hyperSpec находится в разделе Depends файла DESCRIPTION, и тот же пакет импортируется в NAMESPACE:
import(hyperSpec)
Любая помощь будет высоко ценится!
1 ответ
Я просто скопировал и вставил комментарий Тайлера, чтобы сделать его более очевидным: символ "@" не работает в примере кода. Это приводит к сбою roxoygen2.
Чтобы это исправить, просто удвойте @
...
#' xgb.importance(agaricus.test$data@@Dimnames[[2]], 'xgb.model.dump')
Вместо:
#' xgb.importance(agaricus.test$data@Dimnames[[2]], 'xgb.model.dump')