R 基于长参数组合的S4方法调度 动机
我试图创建一个通用的R函数,它不依赖于主参数(R 基于长参数组合的S4方法调度 动机,r,generics,methods,s4,R,Generics,Methods,S4,我试图创建一个通用的R函数,它不依赖于主参数(n)的签名,而是依赖于辅助参数的存在来分派方法 我不确定这在S3中是否可行,但我知道如何在S4中实现这一点(尽管你可能会注意到,这是一种草率的方式)。不知道R5或S6 MRE setGeneric( name=“genfunk”, def=功能(n、a、b、c、d)标准通用(“genfunk”), 签名=c(“a”、“b”、“c”、“d”) ) 设置方法( f=“genfunk”, 签名=列表( a=“数字”, b=“数字”, c=“失踪”, d=“
n
)的签名,而是依赖于辅助参数的存在来分派方法
我不确定这在S3中是否可行,但我知道如何在S4中实现这一点(尽管你可能会注意到,这是一种草率的方式)。不知道R5或S6
MRE
setGeneric(
name=“genfunk”,
def=功能(n、a、b、c、d)标准通用(“genfunk”),
签名=c(“a”、“b”、“c”、“d”)
)
设置方法(
f=“genfunk”,
签名=列表(
a=“数字”,
b=“数字”,
c=“失踪”,
d=“缺失”
),
定义=函数(n,a,b)n+a+b
)
设置方法(
f=“genfunk”,
签名=列表(
a=“失踪”,
b=“失踪”,
c=“数字”,
d=“数字”
),
定义=函数(n,c,d)n*c*d
)
这使我能够调用函数并获得如下内容:
r$>genfunk(10,a=1,b=2)
[1] 13
r$>genfunk(10,c=3,d=2)
[1] 60
问题
问题是,混合调用会给用户带来“胡说八道”:
r$>genfunk(10,a=1,c=2)
(函数(类、fdef、mtable)中出错:
找不到签名“numeric”、“missing”、“numeric”、“missing”的函数“genfunk”的继承方法
问题
genfunk
的文档包含以下内容:#'@title是的,title!
#“@param n Enn
#“@出口
每种方法都记录为:
#@title AB funk
#“@param a Ehi!
#“@param b Bee
#“@rdname genfunk
抱歉,这不是S4,但从您提问的方式来看,我相信您可能也对可能的S3解决方案感到好奇。如果我理解正确,您希望基于特定命名参数组合的存在来分派方法。我认为没有办法为您选择的每个组合手动定义方法希望允许,然后为其余部分创建一个“默认方法”。基于S3中的参数进行调度的一种方法是:
genfunk错误:参数的奇怪组合
(v0.3.0)于2021-02-03年创建,简而言之,-您想为每个参数组合提供方法吗?@tjebo,差不多。我想为一些(相互排斥的)参数组合提供方法,并可能为其他组合提供伞式方法(只是为了向用户提供一些关于如何使用泛型的有用反馈)。你看过
dotsMethods
的帮助页面了吗?你的函数可以用..
作为参数来代替命名参数吗?@JDL,谢谢你指出这一点,我不知道这有一个文档页面。如果我有进展,我会尝试一下,然后回到这里。谢谢你的贡献!我真的不在乎哪一个我最终使用的对象系统。你在泛型中定义类的想法听起来很有希望,我来试一试。