相关疑难解决方法(0)

将S4调度添加到基本R S3泛型

我正在尝试添加一个merge需要为S4 的空间方法(因为它会调度两个不同对象的类型).

我尝试使用如下的早期解决方案:

#' 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")
})
Run Code Online (Sandbox Code Playgroud)

哪个工作:

x <- 1
class(x) <- "SpatialPolygonsDataFrame"
y <- data.frame()
> merge(x,y)
generic dispatch
method dispatch
Run Code Online (Sandbox Code Playgroud)

你将不得不相信我,如果x实际上是一个SPDF而不是伪造的,它不会返回你实际运行该代码时得到的插槽错误(或者没有,只是使用更宽松的通用以下不会返回错误).SPDF是一种痛苦的创造.

问题是它似乎覆盖了S3调度:

> …
Run Code Online (Sandbox Code Playgroud)

r s4

7
推荐指数
1
解决办法
613
查看次数

标签 统计

r ×1

s4 ×1