gpt4 book ai didi

r - 如何检查函数是否在R中的向量中?

转载 作者:行者123 更新时间:2023-12-02 00:58:23 26 4
gpt4 key购买 nike

我想做类似 pnorm %in% c(pnorm, pt, pchisq) 的事情,但这不起作用。

我能做些什么呢?

最佳答案

pnorm %in% c(pnorm, pt, pchisq)

导致错误:

Error in match(x, table, nomatch = 0L) : 'match' requires vector arguments



确实 %in%电话 match?match告诉我们(稍微重新格式化):

x : vector or NULL: the values to be matched.



我们可以通过使您的函数成为 1 个元素列表来使其工作:
list(pnorm) %in% c(pnorm, pt, pchisq)
# [1] TRUE

但是,一种更惯用的方法是在您的函数列表中应用相同的函数,它将循环您的函数元素并检查每个元素是否与 pnorm 相同。 :
sapply(c(pnorm, pt, pchisq), identical, pnorm)
# [1] TRUE FALSE FALSE

要获得所需的输出,请将其包裹在 any 中:
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

关于r - 如何检查函数是否在R中的向量中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52554032/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com