पर एस 4 प्रेषण जोड़ना मैं merge
पर एक स्थानिक विधि जोड़ने की कोशिश कर रहा हूं जिसे एस 4 होना चाहिए (क्योंकि यह दो अलग-अलग वस्तुओं के प्रकारों पर प्रेषित होता है)।आधार आर एस 3 जेनेरिक
मैं इस प्रकार एक earlier solution उपयोग करने की कोशिश की है:
#' 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")
})
काम कौन करता है:
x <- 1
class(x) <- "SpatialPolygonsDataFrame"
y <- data.frame()
> merge(x,y)
generic dispatch
method dispatch
आप मुझ पर भरोसा करने के लिए जा रहे हैं कि एक्स वास्तव में है अगर एक SPDF एक के बजाय एक फिक्र किया गया है, कि अगर आप वास्तव में उस कोड को चलाते हैं तो आपको स्लॉट त्रुटि नहीं मिलती है (या नहीं, और केवल अधिक अनुमोदित जेनेरिक का उपयोग करें जो त्रुटि को वापस नहीं करता है)। एसपीडीएफ बनाने के लिए एक दर्द है।
> 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"
मुझे लगता है कि कैसे बच है:
समस्या यह है कि एस 3 प्रेषण ओवरराइट है लगता है? मैंने setGeneric
से फ़ंक्शन परिभाषा को समाप्त करने का प्रयास किया है ताकि यह आसानी से setGeneric("merge")
पढ़ सके लेकिन यह या तो काम नहीं करता है। क्या मुझे किसी भी तरह merge
एस 3 जेनेरिक base
से आयात करने की ज़रूरत है?
केवल तीसरी निर्दिष्ट डिफ़ॉल्ट प्रेषण
या स्पष्ट रूप से प्रदान करने के लिए मानक प्रेषण के लिए एक मानक सामान्य अनुमति देता है स्थापित करने के लिए कर रहे हैं मेरे लिये कार्य करता है। सबसे पहले मुझे अपने प्रश्न में एक उदाहरण के रूप में मिला है। लेकिन तीसरा काम शानदार ढंग से। –