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
因此,相同的外观可以满足需要,我只想检查是否有更好的方法,例如仅比较对象引用的特定函数,因此可能更快,更直接适用。same() 看起来可以进行逐个字段的比较。
对比子句:这个问题类似于在 R 中,如何检查两个变量名是否引用同一个底层对象?- 但是这个问题已经很老了(R6 之前的课程),答案讨论了使用我宁愿避免的低级技术。