我在 R 中有一个 S3 对象,类似于:
myObject <- list(
someParameter1 = 4,
someList = 1:10
)
class(myObject) <- "myClass"
Run Code Online (Sandbox Code Playgroud)
我为这个类创建了一个提取方法:
"[.myClass" <- function(x, i) {
x$someList[i] * x$someParameter1
}
myObject[5]
# 20
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个分配方法(据?Extract我所知,这称为子分配),以便我可以编写:
myObject[5] <- 250
myObject[5]
# 1000
Run Code Online (Sandbox Code Playgroud)
我首先天真地尝试将其写为
"[<-.myClass" <- function(x, i, value) {
x$someList[i] <- value
}
Run Code Online (Sandbox Code Playgroud)
但由于某种原因,这会替换myObject为value. 我怀疑我必须修改xand then assign("someName", x, pos=somewhere),但是我怎样才能可靠地确定someNameandsomewhere呢?
或者有其他方法可以做到这一点吗?
您需要返回x:
"[<-.myClass" <- function(x, i, value) {
x$someList[i] <- value
x
}
Run Code Online (Sandbox Code Playgroud)
如果您不在return函数调用中使用,则将返回最后计算的表达式的值。对于原始函数,表达式的值为value。为了显示:
"[<-.myClass" <- function(x, i, value) {
print(x$someList[i] <- value)
x
}
myObject[5] <- 250
# [1] 250
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
465 次 |
| 最近记录: |