gpt4 book ai didi

r - set 方法初始化 S4 类与使用函数

转载 作者:行者123 更新时间:2023-12-03 20:18:47 25 4
gpt4 key购买 nike

我现在让类(class) build 以两种方式工作:

首先,

setMethod("initialize", signature(.Object = "BondCashFlows"),
function(.Object, x, y, ...){
do some things .Object@foo = array[,m]
}

第二,
BondCashFlows <- function(){do some things new("BondCashFlows", ...)

所以,我的问题是为什么我什至要为第一个而烦恼,因为第二个更像是创建对象 BondCashFlows 的用户友好方式?

我知道第一个是类上的方法,但我不确定为什么我必须这样做

最佳答案

与简单的 R 函数相比,使用 S4 方法的优点之一是该方法是 强类型 .

  • 拥有签名是一种保护,方法不会暴露给类型
    不符合他们的签名要求。否则会
    抛出异常。
  • 通常情况下,您想要区分方法行为
    取决于传递的参数类型。强类型使得
    非常容易和简单。
  • 强类型更易读(即使在 R 中这个论点可以争论,S4 语法对于初学者来说不是很直观)

  • 在这里和示例中,我定义了一个简单的函数,然后将其包装在一个方法中
    show.vector <- function(.object,name,...).object[,name]

    ## you should first define a generic to define
    setGeneric("returnVector", function(.object,name,...)
    standardGeneric("returnVector")
    )

    ## the method here is just calling the showvector function.
    ## Note that the function argument types are explicitly defined.
    setMethod("returnVector", signature(.object="data.frame", name="character"),
    def = function(.object, name, ...) show.vector(.object,name,...),
    valueClass = "data.frame"
    )

    现在如果你测试这个:
    show.vector(mtcars,'cyl')    ## works
    show.vector(mtcars,1:10) ## DANGER!!works but not the desired behavior
    show.vector(mtcars,-1) ## DANGER!!works but not the desired behavior

    与方法调用相比:
    returnVector(mtcars,'cyl')  ## works
    returnVector(mtcars,1:10) ## SAFER throw an excpetion
    returnVector(mtcars,-1) ## SAFER throw an excpetion

    因此,如果您要将您的方法公开给其他人,最好将它们封装在方法 中。 .

    关于r - set 方法初始化 S4 类与使用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19612839/

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