Tôi đang cố thêm phương thức không gian vào merge
cần phải là S4 (vì nó gửi đi trên hai loại đối tượng khác nhau).Thêm S4 gửi đến cơ sở R S3 chung
Tôi đã cố gắng sử dụng một earlier solution như sau:
#' Merge a SpatialPolygonsDataFrame with a data.frame
#' @param SPDF A SpatialPolygonsDataFrame
#' @param df A data.frame
#' @param \dots Parameters to pass to merge.data.frame
#'
#' @export
#' @docType methods
#' @rdname merge-methods
setGeneric("merge", function(SPDF, df, ...){
cat("generic dispatch\n")
standardGeneric("merge")
})
#' @rdname merge-methods
#' @aliases merge,SpatialPolygonsDataFrame,data.frame-method
setMethod("merge",c("SpatialPolygonsDataFrame","data.frame"), function(SPDF,df,...) {
cat("method dispatch\n")
})
nào làm việc:
x <- 1
class(x) <- "SpatialPolygonsDataFrame"
y <- data.frame()
> merge(x,y)
generic dispatch
method dispatch
Bạn sẽ phải tin tưởng tôi rằng nếu x thực sự là một SPDF thay vì một giả mạo một, rằng nó không trả lại lỗi khe mà bạn nhận được nếu bạn thực sự chạy mã đó (hoặc không, và chỉ sử dụng chung chung nhiều hơn cho phép dưới đây mà không trả lại lỗi). SPDF là một nỗi đau để tạo ra.
Vấn đề là nó dường như đã bị ghi đè S3 văn:
> merge(y,y)
generic dispatch
Error in function (classes, fdef, mtable) :
unable to find an inherited method for function "merge", for signature "data.frame", "data.frame"
Làm thế nào để tránh điều đó? Tôi đã cố gắng loại bỏ các định nghĩa chức năng từ setGeneric
để nó chỉ đơn giản là đọc setGeneric("merge")
nhưng điều đó không hoạt động hoặc. Tôi có cần nhập bằng cách nào đó nhập merge
S3 chung từ base
không?
Trong số đó, chỉ có ba làm việc cho tôi. Việc đầu tiên tôi đã thực sự nhận được như là một ví dụ trong câu hỏi của tôi. Nhưng công trình thứ ba rất xuất sắc. –