В случае, если все, что вам нужно, это обнаружить этот элемент в списке, а не обязательно определять оператора, вам не нужно ничего причудливого; мы можем просто добавить еще один list
, чтобы было ясно, что это интересующий нас элемент:
list(list(2, c(5,6))) %in% list1
# [1] TRUE
Обновление: , хотя это может быть интуитивно понятно, что именно происходит, не так ясно. Как заметил @BenBolker, %in%
основан на match
, описание которого гласит
Факторы, необработанные векторы и списки преобразуются в символьные векторы, и
затем x и таблица приводятся к общему типу (последний из двух
типы в порядке R, логическое <целое <числовое <сложное <
символ) до сопоставления. </p>
Итак, казалось бы, list(list(2, c(5,6)))
и list1
сначала преобразуются (как-то) в символьные векторы. Поскольку нам нужно сохранить структуру и упорядочить одно разумное предположение, что это прямо означает
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"