仅供参考,看起来这个问题已经有了一个LISP equivalent。
最近,我想为R基函数setdiff创建一个数据帧扩展,并且认为泛型会更好。下面的代码可以工作,但很笨拙:
#' @export setdiff.default
setdiff.default <- setdiff
#' @export
setdiff <- function(x, ...) {
UseMethod("setdiff")
}
#' @export
setdiff.data.frame <- function(A, B) {
A[!duplicated(rbind(B, A))[nrow(B) + 1:nrow(A)], ]
}当您加载程序包时,基本函数被屏蔽。如果我为新函数编写额外的文档,则会创建另一个.Rd文件,该文件将与原始的基本R函数竞争(R要求您在运行?setdiff时选择所需的文件)。
有没有一种干净利落的方法呢?
发布于 2017-01-27 09:40:49
这可以使用S4来完成。请注意,setdiff使用x和y作为参数,因此该方法也应该:
setGeneric("setdiff")
setdiff.data.frame <- function(x, y) {
x[!duplicated(rbind(y, x))[nrow(y) + 1:nrow(x)], ]
}
setMethod("setdiff", signature("data.frame", "data.frame"), setdiff.data.frame)
# test
setdiff(BOD[1:3, ], BOD[2:4, ])https://stackoverflow.com/questions/41884629
复制相似问题