gpt4 book ai didi

r - 如果已经有一个同名的函数,则定义一个 S4 方法

转载 作者:行者123 更新时间:2023-12-02 08:50:44 25 4
gpt4 key购买 nike

我有一个函数 myFunction,我需要创建一个同名的 S4 方法(不要问我为什么)。
我想保留 myFunction 的旧功能。

有没有办法保留我的旧功能?

我宁愿不为这个旧函数设置泛型,因为签名可能非常不同......

最佳答案

是的,有一种方法可以保留您的旧功能。除非您希望 S3 和 S4 函数都接受相同数量的相同类的参数,否则这样做并不复杂。

# Create an S3 function named "myFun"
myFun <- function(x) cat(x, "\n")

# Create an S4 function named "myFun", dispatched when myFun() is called with
# a single numeric argument
setMethod("myFun", signature=signature(x="numeric"), function(x) rnorm(x))

# When called with a numeric argument, the S4 function is dispatched
myFun(6)
# [1] 0.3502462 -1.3327865 -0.9338347 -0.7718385 0.7593676 0.3961752

# When called with any other class of argument, the S3 function is dispatched
myFun("hello")
# hello

如果您确实希望 S4 函数采用与 S3 函数相同类型的参数,您需要执行如下操作,设置参数的类,以便 R 具有某种方式来判断您打算使用这两个功能中的哪一个:

setMethod("myFun", signature=signature(x="greeting"), 
function(x) cat(x, x, x, "\n"))

# Create an object of class "greeting" that will dispatch the just-created
# S4 function
XX <- "hello"
class(XX) <- "greeting"
myFun(XX)
# hello hello hello

# A supplied argument of class "character" still dispatches the S3 function
myFun("hello")
# hello

关于r - 如果已经有一个同名的函数,则定义一个 S4 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8640957/

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