我有一个容器类,它基本上是一个列表。因为我想支持子集,所以我重载了子集[
运算符(可能实现得很差)。
#' Constructor for spectra object
.spectra = function(n_spectrum = 0) {
object = vector(mode = "list", n_spectrum)
class(object) = "spectra"
return(object)
}
#' Operator overload
#' @export
`[.spectra` = function(x, i) {
x = unclass(x)
x = x[i] # Using the list's subset function
class(x) = "spectra"
return(x) # Should return a "spectra" object, not a list
}
现在,这在我的开发环境中(当我调试包时)按预期工作。也就是说, ify_old
是一个spectra
对象,而 I do y_new = y_old[-1]
,y_new
仍然是一个spectra
对象。
但是,当我将项目编译为包并安装它时,子集运算符返回 alist
而不是spectra
对象。
有什么线索吗?
编辑
我忘了提到我正在使用 RStudio 和devtools
库。