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

泽拉兹尼7

我有一个称为的通用函数foo它在类上的操作不同barbaz但是有一些共享的预处理只需要执行一次。R的惯用方式是什么?

在下面的愚蠢示例中,我想将传递给泛型的对象乘以10。但是,当调用该方法时,原始值将打印到控制台。我已经阅读了语言定义,并且知道以下模式不起作用。我的问题是:在调用方法之前,应在哪里或应如何处理通用参数的共享处理?

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

foo <- function(x) {
  x <- x * 10 # where should shared preprocessing go?
  UseMethod("foo")
}

foo.bar <- function(x) {
  cat("Foo!", x)
}

foo.baz <- function(x) {
  cat("Baz!", x)
}

# does not propagate the operations carried out `foo`
foo(a)
foo(b)
G.格洛腾迪克

1)在实际通用更改之上的foo层foo执行初始代码并调用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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

快速类传递给泛型函数

来自分类Dev

将泛型函数作为参数传递

来自分类Dev

如何在Flutter中将函数传递给泛型函数参数?

来自分类Dev

如何将泛型函数作为参数传递给另一个函数?

来自分类Dev

将类型传递给泛型函数并进行比较

来自分类Dev

斯威夫特:可等于字典不能传递给泛型函数

来自分类Dev

如何将可变实体传递给泛型函数?

来自分类Dev

模式匹配和(增加的)泛型函数类型参数

来自分类Dev

将任何泛型函数作为C ++参数传递

来自分类Dev

将任何泛型函数作为C ++参数传递

来自分类Dev

以泛型函数为参数的泛型函数

来自分类Dev

如何确保传递给高阶函数的泛型函数具有void返回类型?

来自分类Dev

传递给泛型函数时如何访问@Published属性的包装值

来自分类Dev

如何将对象传递给TypeScript中的泛型函数

来自分类Dev

Swift:将类型从属性传递给泛型函数

来自分类Dev

调用在递归函数中作为参数传递的泛型函数

来自分类Dev

以属性为参数的泛型函数

来自分类Dev

Julia泛型函数类型参数

来自分类Dev

如何从Swift泛型函数捕获参数

来自分类Dev

访问传递给原型函数的值

来自分类Dev

DryIoC根据泛型类型参数将参数传递给开放泛型服务的构造函数

来自分类Dev

无法修改作为参数传递给函数的指针变量

来自分类Dev

R:将函数参数传递给sqldf

来自分类Dev

通过R中的foo(x,bar)的第二个参数调用的泛型函数

来自分类Dev

使用switch语句创建泛型函数,该函数根据参数中传递的类型执行不同的代码

来自分类Dev

参数传递给函数

来自分类Dev

泛型函数和带Type参数的函数之间的区别

来自分类Dev

泛型函数重载

来自分类Dev

Delphi泛型函数

Related 相关文章

热门标签

归档