merge
に空間的な方法を追加しようとしていますが、それは2つの異なるオブジェクトのタイプをディスパッチするためです。S4 S3ディスパッチを基底R S3に追加する
:
作業を行い#' 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
あなたは、xは本当に代わりにAのSPDFである場合という私を信頼する必要があるとしていますあなたが実際にそのコードを実行した場合(またはそうではなく、エラーを返さないより一般的な一般的な汎用コードを使用する場合)に得られるスロットエラーを返さないことを偽ったものです。 SPDFは作成する苦痛である。
問題は、S3の派遣を上書きしているようだということです。
> 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"
は、私はそれをどのように回避していますか?私はsetGeneric
から関数定義を削除しようとしましたが、それは単にsetGeneric("merge")
を読みますが、どちらも機能しません。 merge
S3汎用品をbase
からインポートする必要はありますか?
、唯一の三分の一を指定するデフォルトのディスパッチ
または明示的に提供するための標準的な派遣を可能に標準の一般的な設定になっています私のために働く。私は実際に私の質問の一例として持っている最初の。しかし、3番目の作品は素晴らしいです。 –