当前位置:  开发笔记 > 编程语言 > 正文

R模式修改传递给泛型函数的参数

如何解决《R模式修改传递给泛型函数的参数》经验,为你挑选了1个好方法。



1> G. Grothendi..:

1)在实际泛型更改之上的层foofoo执行初步代码并调用foo_新的泛型,如图所示.重命名foo.bar,并foo.bazfoo_.barfoo_.baz分别让我们剩下的(也加入了新行的例子):

foo <- function(x) {
    x <- x * 10
    foo_(x)
}

foo_ <- function(x) UseMethod("foo_")

foo_.bar <- function(x) cat("Foo!", x, "\n")
foo_.baz <- function(x) cat("Baz!", x, "\n")

现在测试一下:

a <- structure(1:5, class="bar")
b <- structure(6:10, class="baz")

foo(a)
## Foo! 10 20 30 40 50
foo(b)
## Baz! 60 70 80 90 100

有关广泛使用的包中的示例,请参阅dplyr :: mutate的源代码

2)NextMethod另一种方法是给每一个对象两个类的与类载体"foo"制成的子类"bar"中的情况下a"baz"在的情况下b.然后用NextMethod.解决方案(1)似乎简单,它可能看起来奇怪的是"foo"是两者的子类"bar""baz"但这里是这一个以防万一的例子:

foo <- function(x) UseMethod("foo")

foo.foo <- function(x) {
    x <- x * 10
    NextMethod()
}
foo.bar <- function(x) cat("Foo!", x, "\n")
foo.baz <- function(x) cat("Baz!", x, "\n")

测试指出的是,我们已经改变了的定义a,并b让他们用这种方式工作:

a <- structure(1:5, class= c("foo", "bar"))
b <- structure(6:10, class = c("foo", "baz"))

foo(a)
## Foo! 10 20 30 40 50
foo(b)
## Baz! 60 70 80 90 100

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有