Tôi có một lớp container về cơ bản là một danh sách. Bởi vì tôi muốn hỗ trợ subsetting, tôi đã quá tải các subset [
nhà điều hành (có khả năng kém triển khai thực hiện).Quá tải của nhà điều hành ngừng hoạt động trong gói R
#' 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
}
Bây giờ, điều này hoạt động như mong đợi khi trong môi trường phát triển của tôi (khi tôi gỡ lỗi gói). Tức là, nếu y_old
là đối tượng spectra
và tôi làm y_new = y_old[-1]
, y_new
vẫn là đối tượng spectra
.
Tuy nhiên, khi tôi biên soạn dự án dưới dạng gói và cài đặt nó, toán tử subsetting trả về list
thay vì đối tượng spectra
.
Bất kỳ đầu mối nào về những gì đang diễn ra?
EDIT
tôi quên đề cập đến mà tôi đang sử dụng RStudio và devtools
thư viện.
Bạn có dòng có 'S3method (" [", spectra)' trong tệp 'NAMESPACE' của gói của bạn không? – nicola
@nicola No. ** Chỉ ** dòng tôi có trong 'NAMESPACE' là' exportPattern ("^ [[: alpha:]] +") ', mà tôi đoán là những gì RStudio đặt trong đó. – dudu
Đặt dòng đó, xây dựng lại gói và xem nó có hoạt động hay không. – nicola