[英]How to check if a function is in a vector in R?
我想做pnorm %in% c(pnorm, pt, pchisq)
,但这不起作用。
我该怎么做呢?
使用purrr的解决方案:
has_element(c(pt,pnorm,pchisq),pnorm)
#[1] TRUE
has_element(c(pt,pchisq),pnorm)
#[1] FALSE
pnorm %in% c(pnorm, pt, pchisq)
导致错误:
匹配错误(x,table,nomatch = 0L):'match'需要向量参数
确实%in%
调用match
并且?match
告诉我们(稍微重新格式化):
x :vector或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)),
的输出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
`%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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.