R 修改%in%运算符以在列表中查找对象
我必须修改%运算符中的R 修改%in%运算符以在列表中查找对象,r,list,R,List,我必须修改%运算符中的%,该运算符将在列表中查找对象 我有一份清单: list1purrr::has_元素应该能满足您的需求: purrr::has_element(list1, c(5,6)) #[1] TRUE purrr::has_element(list1, 6) #[1] TRUE purrr::has_element(list1, 2) #[1] FALSE purrr::has_element(list1, list(2, c(5,6))) #[1] TRUE 您还可以编写自己的
%,该运算符将在列表中查找对象
我有一份清单:
list1purrr::has_元素
应该能满足您的需求:
purrr::has_element(list1, c(5,6))
#[1] TRUE
purrr::has_element(list1, 6)
#[1] TRUE
purrr::has_element(list1, 2)
#[1] FALSE
purrr::has_element(list1, list(2, c(5,6)))
#[1] TRUE
您还可以编写自己的中缀函数,该函数围绕此函数运行,就像%
%中的%:
`%in2%` <- function(lhs, rhs) purrr::has_element(rhs, lhs)
c(5,6) %in2% list1
#[1] TRUE
6 %in2% list1
#[1] TRUE
2 %in2% list1
#[1] FALSE
list(2, c(5,6)) %in2% list1
#[1] TRUE
`%in2%`如果您只想在列表中检测此元素,而不必定义运算符,则无需任何花哨的操作;我们可以简单地添加另一个列表
,以明确这是我们感兴趣的单个元素:
list(list(2, c(5,6))) %in% list1
# [1] TRUE
更新:虽然这可能是直观的,但究竟发生了什么并不清楚。正如@BenBolker所观察到的,%
中的%是基于匹配的,其描述是
因子、原始向量和列表转换为字符向量,以及
然后x和table被强制为一个公共类型(两者中较晚的一个)
R排序中的类型,逻辑<整数<数字<复数<
字符)在匹配之前
因此,似乎list(list(2,c(5,6))
和list1
首先(以某种方式)转换为字符向量。因为我们需要保持结构和顺序,所以我们可以合理地猜测它的直接含义
as.character(list(list(2, c(5,6)))) %in% as.character(list1)
在哪里
foo=list(2,c(5,6));lapply(list1,function(x)idential(x,foo))
你是在寻找一种方法来检测list1中的列表(2,c(5,6))
,还是一定要通过修改%in%
?类似于@d.b的方法:f@d.b非常感谢你,它对我很好!有趣。我想我明白了为什么会这样(详细说明?%in%”
解释了在match()
(这是%in%
的基础)中,列表在匹配之前被转换为字符向量);最好能解释一下/illustrate@BenBolker真有趣。我用一些猜测更新了答案。
list(list(2, c(5,6))) %in% list1
# [1] TRUE
as.character(list(list(2, c(5,6)))) %in% as.character(list1)
as.character(list(list(2, c(5,6))))
# [1] "list(2, c(5, 6))"
as.character(list1)
# [1] "c(5, 6)" "6" "list(2, c(5, 6))" "string"