gpt4 book ai didi

r - 多个S3方法之间的公共(public)操作

转载 作者:行者123 更新时间:2023-12-04 19:54:28 25 4
gpt4 key购买 nike

我最近(非常)开始研究在 R 中创建 S3 函数。我在一个函数中工作,我预见到不同方法之间会有共同的操作。不知道应该怎么做。例如:

myfun <- function (x) {
UseMethod("myfun")
}

myfun.numeric <- function(x) {
a<-x+5
b<-a^2
c<-b+4
d<-c-3
d
}

myfun.character <- function(x) {
a<-as.numeric(x)+9
b<-a^2
c<-b+4
d<-c-3
d
}

myfun("3")
myfun(3)

此时的函数并不算长。我想从技术上讲,我可以有一个函数来执行由字母“a”表示的部分,然后有一个通用函数来执行步骤“b”、“c”和“d”。在某些情况下,功能可能很短,并且具有附加功能似乎不是最佳实践。在这种情况下通常会做什么?

最佳答案

这里有两种可能性。使用默认方法存在一些危险,因为它可能会在意想不到的情况下被调用,因此通用函数看起来更可靠,但在您展示的示例中都可以。

1)默认方法 将常用代码放在默认方法中,使用NextMethod()

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

myfun.numeric <- function(x) {
x<-x+5
NextMethod()
}

myfun.character <- function(x) {
x <-as.numeric(x)+9
NextMethod()
}

myfun.default <- function(x) {
b<-x^2
c<-b+4
d<-c-3
d
}

myfun("3")
myfun(3)

2) 通用函数 或者,将通用代码放在一个名为common 的单独函数中,然后调用它。

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

myfun.numeric <- function(x) {
y <-x+5
common(y)
}

myfun.character <- function(x) {
y <-as.numeric(x)+9
common(y)
}

common <- function(x) {
b<-x^2
c<-b+4
d<-c-3
d
}

myfun("3")
myfun(3)

关于r - 多个S3方法之间的公共(public)操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35283400/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com