R语言如何正确判断指定列表是否是嵌套列表的元素?
问题根因
%in%运算符的匹配逻辑是将左操作数的每个底层元素,逐一和右操作数的顶层元素做等值匹配:
你示例中左操作数a = list(1,2)会被拆分为1、2两个元素去匹配,而右操作数c的顶层元素是两个列表对象(list(1,2)和list(2,3)),自然无法匹配到数值1、2,所以返回FALSE FALSE。
实现方案
要判断某个对象是否是列表的顶层元素,需要用identical()做全对象匹配,而不是逐元素等值匹配:
基础R实现(无需额外安装包)
# 逐一遍历c的顶层元素,判断是否和a完全相等,再取任意匹配的结果 any(sapply(c, function(x) identical(a, x))) # 返回结果:TRUE
purrr包简洁实现
如果你已经安装了purrr包,可以用some()函数直接实现逻辑:
library(purrr) some(c, ~identical(a, .x)) # 返回结果:TRUE
内容的提问来源于stack exchange,提问作者volfi
相关产品推荐
相关产品推荐

