gpt4 book ai didi

r - 编写一个带有参数的函数,该参数指示要应用的函数

转载 作者:行者123 更新时间:2023-12-02 06:39:42 25 4
gpt4 key购买 nike

有没有一种方法可以编写一个函数,其中一个参数指示要应用的函数?

例如,如果我有一个函数:

mf = function(data, option, level)

我希望选项告诉我是否要计算数据集的meanmediansd

最佳答案

是的,一种选择是将一个函数传递给option。例如

mf <- function(data, option) {
option <- match.fun(option)
option(data)
}

set.seed(42)
dat <- rnorm(10)
mf(dat, option = mean)

给出:

> set.seed(42)
> dat <- rnorm(10)
> mean(dat)
[1] 0.5472968
> mf(dat, option = mean)
[1] 0.5472968
> sd(dat)
[1] 0.8354488
> mf(dat, option = sd)
[1] 0.8354488

match.fun() 是匹配可用函数的标准 R 方法。在示例中,我传递了函数本身,但是 match.fun() 允许以其他方式引用函数,例如作为字符串:

> mf(dat, option = "mean")
[1] 0.5472968

match.fun() 返回一个可以用作任何其他函数的函数,因此 option() 是一个与传递的函数本质上相同的函数到 option 参数或者是在 option 参数中命名的函数。

尚不清楚应该如何使用 level 参数,我忽略了上面的内容。

我可能应该补充一点,如果您想将任何参数传递给应用函数,那么您需要在函数定义中使用 ...,例如:

mf <- function(data, option, ...) {
option <- match.fun(option)
option(data, ...)
}

因此我们可以这样做

set.seed(42)
dat2 <- rnorm(10)
dat2[4] <- NA
mean(dat2)
mean(dat2, na.rm = TRUE)
mf(dat2, mean, na.rm = TRUE)

最后三行给出

> mean(dat2)
[1] NA
> mean(dat2, na.rm = TRUE)
[1] 0.5377895
> mf(dat2, mean, na.rm = TRUE)
[1] 0.5377895

关于r - 编写一个带有参数的函数,该参数指示要应用的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10422046/

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