S4 olması gereken (iki farklı nesnenin türlerini gönderdiği için) merge
için uzamsal bir yöntem eklemeye çalışıyorum. aşağıdaki gibiS4 gönderimini R4 temeline ekleme jenerik
Bir earlier solution kullanarak denedi:
nasıl çalışır#' 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")
})
: Bir yerine Bana güvenmek zorunda gidiyoruz
x <- 1
class(x) <- "SpatialPolygonsDataFrame"
y <- data.frame()
> merge(x,y)
generic dispatch
method dispatch
x gerçekten de eğer bir SPDF Bir kod, aslında bu kodu çalıştırırsanız aldığınız yuva hatasını döndürmez (ya da yapma, ve sadece aşağıdaki hataya neden olmayan daha izin veren jenerik kullanın). SPDF'ler oluşturmak için bir acıdır.
> 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"
Bunu nasıl engelleyebilirim:
sorun S3 gönderme üzerine görünüyor bu? setGeneric
işlev tanımını ortadan kaldırmayı denedim, böylece setGeneric("merge")
yazıyor, ancak bu da çalışmıyor. merge
S3 jenerikini base
'dan bir şekilde almam gerekir mi?
, sadece üçte belirtmek varsayılan sevk
veya açıkça sağlamak için standart sevk sağlayan standart bir jenerik ayarlamak için vardır benim için çalışıyor. İlk önce soruma bir örnek verdim. Ama üçüncü zekice çalışır. –