gpt4 book ai didi

r - S4:使用类属性作为类方法的默认输入值

转载 作者:行者123 更新时间:2023-12-04 11:17:41 26 4
gpt4 key购买 nike

我是 R 中 S4 OO 系统的新手。我想使用类属性作为泛型方法的默认输入,但我收到一条错误消息,指出 argument "xxx" is missing, with no default .

基本上我有一个函数列表(即类方法),它们在相同的类属性集上运行。我希望使用这些类属性作为函数列表的默认输入值,但是我实现的方式(我使用了 definition = function(theObject, input = theObject@attribute1) ,参见下面的示例代码)抛出错误......为什么它不起作用?

提前谢谢了!

class1 = setClass("class1", 
slots = c(attribute1 = "numeric"),
prototype = list(
attribute1 = NULL
))

setGeneric(name = "method1",
def = function(theObject, input){
standardGeneric("method1")
})

setMethod(f = "method1",
signature = "class1",
definition = function(theObject, input = theObject@attribute1){
theObject@attribute1 = input + 1
return (theObject)
})


x = class1() # instantiate an object from class1
x@attribute1 = 1 # set attribute value
method1(x, input = 2) # This works fine if I use "input = 2" explicitly

# This throws the following error "Error in method1(x) : argument "input" is missing, with no default"
# Even though in setMethod part I did specify the default value of input
method1(x)

最佳答案

不知道为什么会这样,但为了使用 setMethod 为输入设置默认值,泛型也需要一个默认值。例如。:

class1 = setClass("class1", 
slots = c(attribute1 = "numeric"),
prototype = list(
attribute1 = NULL
))

setGeneric(name = "method1",
def = function(theObject, input=NA){ #Setting any input here enables defaults for methods
standardGeneric("method1")
})

setMethod(f = "method1",
signature = "class1",
definition = function(theObject, input=1){
theObject@attribute1 = input + 1
return (theObject)
})

x = class1()
x@attribute1 = 1
method1(x, input = 2)
method1(x)

关于r - S4:使用类属性作为类方法的默认输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49497416/

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