gpt4 book ai didi

R 与 match.arg 类似的枚举参数 : How to choose a non-first element as default value?

转载 作者:行者123 更新时间:2023-12-02 04:34:47 25 4
gpt4 key购买 nike

如何将多个允许的参数值中的第一个以外的值声明为默认值(如果未传入任何值)?

library(stats)

center <- function(x, type = c("mean", "median", "trimmed")) {
type <- match.arg(type)
switch(type,
mean = mean(x),
median = median(x),
trimmed = mean(x, trim = .1))
}

values <- c(100, 120, 200)

center(values, "median")
# [1] 120

center(values, "mean")
# [1] 140

# uses the first value "mean" as the default!
center(values)
# [1] 140

如果可能的话,我希望查看函数签名中的默认值,以便使默认值显式(可见),例如。 G。 (无效的伪代码!)将第二个元素设置为默认值:

center <- function(x, type = c("mean", "median", "trimmed")[2]) {...

也欢迎其他建议!

PS:我可以将默认值始终放在第一个位置,但如果列表中存在逻辑顺序,我宁愿保留它(例如 payment.Frequency = c("monthly", "quarterly"、“半年一次”、“每年一次”)

最佳答案

您可以修改 match.arg 以采用第二个 arg 值而不是第一个值。只需在函数体中查找并替换该行即可。

matchArg <- base::match.arg
body(matchArg)[[c(4, 3, 2, 3)]] <- quote(return(arg[2L]))

现在,我们将 match.arg 替换为 center 内的新 matchArg 函数,现在我们将获得第二个 type 默认值(中位数)。

center <- function(x, type = c("mean", "median", "trimmed")) {
type <- matchArg(type)
switch(type,
mean = mean(x),
median = median(x),
trimmed = mean(x, trim = .1))
}

values <- c(100, 120, 200)

center(values)
# [1] 120
center(values, "mean")
# [1] 140

当然,这不能满足您的可见性要求。但这只是一个想法。

关于R 与 match.arg 类似的枚举参数 : How to choose a non-first element as default value?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45247177/

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