pnorm %in% c(pnorm, pt, pchisq)
приводит к ошибке:
Ошибка в совпадении (x, таблица, nomatch = 0L): для 'match' требуются аргументы вектора
Действительно %in%
вызывает match
и ?match
говорит нам (слегка переформатированный):
x : вектор или NULL: значения для сопоставления.
Мы можем заставить это работать, сделав вашу функцию списком из 1 элемента:
list(pnorm) %in% c(pnorm, pt, pchisq)
# [1] TRUE
Однако, более идиотский способ сделать то, что вы хотите, - применить функцию, идентичную вашему списку функций, это будетЗацикливайте элементы вашей функции и проверяйте для каждого из них, идентичен ли он pnorm
:
sapply(c(pnorm, pt, pchisq), identical, pnorm)
# [1] TRUE FALSE FALSE
Чтобы получить желаемый результат, оберните его в любой:
any(sapply(c(pnorm, pt, pchisq), identical, pnorm))
# [1] TRUE
Эти 2 метода не строго эквивалентны, однако, потому что идентичные более строгие и будут проверять среду, в то время как первое решение будет проверять только аргументы и тело (то есть вывод as.list(fun)),
см:
pnorm2 <- function (q, mean = 0, sd = 1, lower.tail = TRUE, log.p = FALSE)
.Call(C_pnorm, q, mean, sd, lower.tail, log.p)
environment(pnorm2)
# <environment: R_GlobalEnv>
environment(pnorm)
# <environment: namespace:stats>
any(sapply(c(pnorm, pt, pchisq), identical, pnorm2))
# [1] FALSE
list(pnorm2) %in% c(pnorm, pt, pchisq)
# [1] TRUE