gpt4 book ai didi

r - setMethod ("$<-") 和 set setReplaceMethod ("$") 之间有什么区别?

转载 作者:行者123 更新时间:2023-12-04 07:01:25 24 4
gpt4 key购买 nike



中编程时与 OOP系统,何时必须使用 setReplaceMethod ? 我看不出和 setMethod 有什么区别添加时 <-到函数的名称。是否setMethod("$<-")setReplaceMethod("$")是平等的?

文档

  • 我在 ?setReplaceMethod 的文档中没有找到任何内容或 ??setReplaceMethod .除了用法,别无他法。
  • 在 StackOverflow 中,有 several questions about setReplaceMethod但没有帮助。当我看到似乎是 not possible to use roxygen2 时,我开始搜索这个问题的答案。记录使用 setReplaceMethod 创建的方法
  • 我没有找到任何东西 searching in r-project.org

  • 可复制的例子
    library(methods)

    # Create a class
    setClass("TestClass", slots = list("slot_one" = "character"))

    # Test with setMethod -----------------------
    setMethod(f = "$<-", signature = "TestClass",
    definition = function(x, name, value) {
    if (name == "slot_one") x@slot_one <- as.character(value)
    else stop("There is no slot called",name)
    return(x)
    }
    )
    # [1] "$<-"

    test1 <- new("TestClass")
    test1$slot_one <- 1
    test1

    # An object of class "TestClass"
    # Slot "slot_one":
    # [1] "1"

    # Use setReplaceMethod instead -----------------------
    setReplaceMethod(f = "$", signature = "TestClass",
    definition = function(x, name, value) {
    if (name == "slot_one") x@slot_one <- as.character(value)
    else stop("There is no slot called",name)
    return(x)
    }
    )

    # An object of class "TestClass"
    # Slot "slot_one":
    # [1] "1"
    test2 <- new("TestClass")
    test2$slot_one <- 1
    test2
    # [1] "$<-"

    # See if identical
    identical(test1, test2)
    # [1] TRUE

    实际结论
    setReplaceMethod似乎只允许避免 <-创建 set 方法时。因为 roxygen2无法记录使用生成的方法,现在最好使用 setMethod .我有权利吗?

    最佳答案

    这里是 setReplaceMethod 的定义

    > setReplaceMethod
    function (f, ..., where = topenv(parent.frame()))
    setMethod(paste0(f, "<-"), ..., where = where)
    <bytecode: 0x435e9d0>
    <environment: namespace:methods>

    它将“<-”粘贴到名称上,因此在功能上等同于 setMethod("$<-") . setReplaceMethod 传达了更多的语义含义。

    关于r - setMethod ("$<-") 和 set setReplaceMethod ("$") 之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24253048/

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