identical()函数似乎给出了正确答案,但文档没有明确讨论对象引用。文档中最接近的注释是:
检查两个大型复杂对象的相等性可能需要更长时间 如果对象相同或几乎相同,但完全代表 独立副本。
使用same()的一些例子:
QuickClass <- R6::R6Class("QuickClass",
public = list(
initialize = function(x) {
private$px <- x
}
),
active = list(
x = function(px) {
if(missing(px)) return(private$px)
else private$px <- px
}
),
private = list(
px = 0
)
)
> a <- QuickClass$new(1)
> identical(a, a)
[1] TRUE
> b <- a
> identical(a, b)
[1] TRUE
> c <- QuickClass$new(2)
> identical(a, c)
[1] FALSE
> d <- QuickClass$new(1)
> identical(a, d)
[1] FALSE
所以,相同看起来需要做什么,我只想检查是否有更好的方法,例如一个只比较对象引用的特定函数,因此可能更快,更直接适用。相同()看起来可以求助于逐场比较。
对比条款:这个问题类似于In R, how can I check if two variable names reference the same underlying object? - 然而这个问题已经过时了(R6之前的课程),答案讨论的是使用我宁愿避免使用的低级技术。
答案 0 :(得分:1)
您可以为每个新对象分配一个随机id
并比较id
。
library(R6)
MyClass <- R6Class(
"MyClass",
public = list(
id = NULL,
initialize = function(){
self$id <- as.character(sample(1:10^6, 1))
}
)
)
MyClass$equal <- function(object1, object2){
object1$id == object2$id
}
A <- MyClass$new()
B <- MyClass$new()
MyClass$equal(A, A)
# TRUE
MyClass$equal(A, B)
# FALSE