gpt4 book ai didi

r - 开关/外壳的成语

转载 作者:行者123 更新时间:2023-12-03 12:54:47 26 4
gpt4 key购买 nike

我有一些R代码看起来基本上是这样的:

compute.quantiles <- function(mu, type) {

## 'mu' and 'type' are vectors of the same length

var <- ifelse(type=='a', 6.3523 * mu^2,
ifelse(type=='b', 234.23 * mu,
ifelse(type=='c', {s <- 9.8 * ((mu-0.3)/3)^(6/7)+0.19; mu + mu^2/s},
ifelse(type=='d', 56.345 * mu^1.5,
ifelse(type=='e', 0.238986 * mu^2,
ifelse(type=='f', mu + 1.1868823 * mu^2,
NA ))))))

# ...then do something with var...
}


一些示例输入和输出:

print(compute.quantiles(2:4, c('c','d','e')))
[1] 2.643840 292.777208 3.823776


这可以正常工作,但是在深层嵌套中很难看,所以我想知道是否还有其他更好的用法。有人有建议吗?如果 switch()接受一个向量作为它的第一个参数,那会很好,但是只需要一个标量。

最佳答案

我想我想出了我更喜欢的东西:

## Vector-switch
vswitch <- function(EXPR, ...) {
vars <- cbind(...)
vars[cbind(seq_along(EXPR), match(EXPR, names(list(...))))]
}

compute.quantiles <- function(mu, type) {
stopifnot(length(mu) == length(type))

vswitch( type,
a = 6.3523 * mu^2,
b = 234.23 * mu,
c = mu + mu^2/(9.8 * ((mu-0.3)/3)^(6/7)+0.19),
d = 56.345 * mu^1.5,
e = 0.238986 * mu^2,
f = mu + 1.1868823 * mu^2)
}


由于矩阵索引代码只有两行,我认为对于过于聪明的代码阈值来说还可以。 =)

关于r - 开关/外壳的成语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10487496/

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