gpt4 book ai didi

r - 如何为 S3 对象创建赋值方法?

转载 作者:行者123 更新时间:2023-12-04 11:10:15 24 4
gpt4 key购买 nike

我在 R 中有一个 S3 对象,例如:

myObject <- list(
someParameter1 = 4,
someList = 1:10
)
class(myObject) <- "myClass"

我为这个类创建了一个提取方法:
"[.myClass" <- function(x, i) {
x$someList[i] * x$someParameter1
}
myObject[5]
# 20

现在我想创建一个赋值方法(从 ?Extract 我理解这称为子赋值),这样我就可以写:
myObject[5] <- 250
myObject[5]
# 1000

我首先天真地尝试将其写为
"[<-.myClass" <- function(x, i, value) {
x$someList[i] <- value
}

但出于某种原因,这将 myObject 替换为 value 。我怀疑我必须修改 x ,然后 assign("someName", x, pos=somewhere) ,但我怎样才能可靠地确定 someNamesomewhere

或者有没有不同的方法来做到这一点?

最佳答案

您需要返回 x :

"[<-.myClass" <- function(x, i, value) {
x$someList[i] <- value
x
}

如果您在函数调用中未使用 return,则将返回上次计算的表达式的值。对于您的原始函数,表达式的值为 value 。为了显示:
"[<-.myClass" <- function(x, i, value) {
print(x$someList[i] <- value)
x
}
myObject[5] <- 250
# [1] 250

关于r - 如何为 S3 对象创建赋值方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19711110/

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