实施运营商
Implementing operator
我需要实现运算符 %in%,如果左边的点在右边的列表中,它给出 TRUE,相反情况下给出 FALSE。问题是我不能使用循环和任何额外的包。
正在创建列表
ell <- list( 2, c( 2, 5), list( c( 2, 8)), "test")
列表中的元素
2
c(2, 5)
list(c(2, 8))
"test"
测试元素
2 %in% ell
# TRUE
5 %in% ell
# FALSE
list(c(2, 8)) %in% ell
# TRUE
list(list(2, 8)) %in% ell
# FALSE
"test" %in% ell
# TRUE
%in%
是一个运算符,用于标识第一个参数是否是第二个参数的子集。所以你期望的能力是%in%
无法实现的。这是通过 sapply()
获得所需内容的另一种解决方案。例如:
any(sapply(ell, identical, list(c( 2, 8))))
# [1] TRUE
any(sapply(ell, identical, list(list( 2, 8))))
# [1] FALSE
您可以自己定义一个自定义算子来实现上面的方法。我将其命名为 %IN%
:
`%IN%` <- function(a, b){
any(sapply(b, identical, a))
}
2 %IN% ell
# [1] TRUE
5 %IN% ell
# [1] FALSE
list(c(2, 8)) %IN% ell
# [1] TRUE
list(list(2, 8)) %IN% ell
# [1] FALSE
"test" %IN% ell
# [1] TRUE
我需要实现运算符 %in%,如果左边的点在右边的列表中,它给出 TRUE,相反情况下给出 FALSE。问题是我不能使用循环和任何额外的包。
正在创建列表
ell <- list( 2, c( 2, 5), list( c( 2, 8)), "test")
列表中的元素
2
c(2, 5)
list(c(2, 8))
"test"
测试元素
2 %in% ell
# TRUE
5 %in% ell
# FALSE
list(c(2, 8)) %in% ell
# TRUE
list(list(2, 8)) %in% ell
# FALSE
"test" %in% ell
# TRUE
%in%
是一个运算符,用于标识第一个参数是否是第二个参数的子集。所以你期望的能力是%in%
无法实现的。这是通过 sapply()
获得所需内容的另一种解决方案。例如:
any(sapply(ell, identical, list(c( 2, 8))))
# [1] TRUE
any(sapply(ell, identical, list(list( 2, 8))))
# [1] FALSE
您可以自己定义一个自定义算子来实现上面的方法。我将其命名为 %IN%
:
`%IN%` <- function(a, b){
any(sapply(b, identical, a))
}
2 %IN% ell
# [1] TRUE
5 %IN% ell
# [1] FALSE
list(c(2, 8)) %IN% ell
# [1] TRUE
list(list(2, 8)) %IN% ell
# [1] FALSE
"test" %IN% ell
# [1] TRUE