如何检查 `R6` class 的实例是否存在于 class 实例的向量中
How to check if instance of `R6` class is present in a vector of class instances
我正在寻找一种方法来检查 R6
class 的给定实例是否存在于 R6
class 个实例的向量中。
library(R6)
# define a class
Person <- R6Class("Person", list(
name = NULL,
initialize = function(name) self$name <- name
))
# create two instances of a class
Jack <- Person$new(name = "Jack")
Jill <- Person$new(name = "Jill")
我天真地使用%in%
来检查这个,它似乎有效:
# yes
c(Jack) %in% c(Jack, Jill)
#> [1] TRUE
但实际上 returns TRUE
无论实例如何:
# also yes
c(Jack) %in% c(Jill)
#> [1] TRUE
所以我有两个问题:
- 什么是
%in%
实际上匹配它总是 returns TRUE
?
- 如何正确检查
R6
class 的实例是否存在于 class 个实例的向量中?
R6 对象是环境,c(Jack)
是一个包含环境的列表,%in%
在环境列表上的行为类似。
e1 <- new.env()
e2 <- new.env()
list(e1) %in% list(e2)
## [1] TRUE
尝试identical
sapply(c(Jack , Jill), identical, Jack)
## [1] TRUE FALSE
R6 对象在它们的 class 向量中有 "R6"
所以
sapply(c(Jack, Jill, sin, 37), inherits, "R6")
## [1] TRUE TRUE FALSE FALSE
我正在寻找一种方法来检查 R6
class 的给定实例是否存在于 R6
class 个实例的向量中。
library(R6)
# define a class
Person <- R6Class("Person", list(
name = NULL,
initialize = function(name) self$name <- name
))
# create two instances of a class
Jack <- Person$new(name = "Jack")
Jill <- Person$new(name = "Jill")
我天真地使用%in%
来检查这个,它似乎有效:
# yes
c(Jack) %in% c(Jack, Jill)
#> [1] TRUE
但实际上 returns TRUE
无论实例如何:
# also yes
c(Jack) %in% c(Jill)
#> [1] TRUE
所以我有两个问题:
- 什么是
%in%
实际上匹配它总是 returnsTRUE
? - 如何正确检查
R6
class 的实例是否存在于 class 个实例的向量中?
R6 对象是环境,c(Jack)
是一个包含环境的列表,%in%
在环境列表上的行为类似。
e1 <- new.env()
e2 <- new.env()
list(e1) %in% list(e2)
## [1] TRUE
尝试identical
sapply(c(Jack , Jill), identical, Jack)
## [1] TRUE FALSE
R6 对象在它们的 class 向量中有 "R6"
所以
sapply(c(Jack, Jill, sin, 37), inherits, "R6")
## [1] TRUE TRUE FALSE FALSE