pnorm %in% c(pnorm, pt, pchisq)
导致错误:
匹配错误(x, table, nomatch = 0L):“匹配”需要向量
论据
确实%in% 调用match 和?match 告诉我们(稍微重新格式化):
x : vector or 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
这两种方法不是严格等效的,但是因为相同更严格并且会检查环境,而第一个解决方案只会检查参数和正文(即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