我想做类似pnorm %in% c(pnorm, pt, pchisq)
的事情,但这是行不通的。
我该怎么办?
答案 0 :(得分:1)
使用purrr的解决方案:
has_element(c(pt,pnorm,pchisq),pnorm)
#[1] TRUE
has_element(c(pt,pchisq),pnorm)
#[1] FALSE
答案 1 :(得分:1)
pnorm %in% c(pnorm, pt, pchisq)
结果错误:
match(x,table,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
答案 2 :(得分:0)
`%inl%` <- function(z,l) !is.null(Find(function(x) identical(x,z),l))
pnorm %inl% c(pt,pchisq)
#[1] FALSE
pnorm %inl% c(pt,pnorm,pchisq)
#[1] TRUE