使用s4 OOP系统在r中编程时,必须使用?我没有看到添加到函数名称时有什么不同.是否和是平等的吗?setReplaceMethodsetMethod<-setMethod("$<-")setReplaceMethod("$")
?setReplaceMethod或??setReplaceMethod.除了用法之外什么都没有.roxygen2它创建的方法时,我开始搜索这个问题的答案setReplaceMethodlibrary(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
Run Code Online (Sandbox Code Playgroud)
setReplaceMethod似乎只允许避免<-在创建set方法时.因为roxygen2无法记录生成的方法,所以暂时使用它会更好setMethod.我有权利吗?
Mar*_*gan 10
这是setReplaceMethod的定义
> setReplaceMethod
function (f, ..., where = topenv(parent.frame()))
setMethod(paste0(f, "<-"), ..., where = where)
<bytecode: 0x435e9d0>
<environment: namespace:methods>
Run Code Online (Sandbox Code Playgroud)
它在名称上粘贴了一个"< - ",因此在功能上等同于setMethod("$<-").setReplaceMethod传达了更多的语义含义.
| 归档时间: |
|
| 查看次数: |
965 次 |
| 最近记录: |