gpt4 book ai didi

r - 如何从给定的起点在 R 中进行爬山?

转载 作者:行者123 更新时间:2023-12-03 16:53:33 27 4
gpt4 key购买 nike

我正在寻找一个函数,该函数可以从我提供的起点开始在矢量上进行简单的爬山。更正式地说:给定一个像 y <- c(1,2,3,1,1) 这样的向量, 我想要一个函数 hill(y, x0)这样 hill(y, 1) == 3 (从左边爬到顶部)和hill(y, 5) == 5 (它左右移动,但发现它在高原上,只返回起始值)。我很难相信这不存在,但到目前为止还没有找到。有人有线索吗?

最佳答案

这是一个递归解决方案,来自 https://gist.github.com/3000200 .为简洁起见省略了测试。

climb <- function(y, x0) {
x <- index(y)
n <- length(y)

if (n == 0) { return(NA) }

if (x0 < min(x) | x0 > max(x)) {
warning(sprintf("x0 of %f lies outside data range [%f, %f]", x0, min(x), max(x)))
}

# TODO: beautify this.
w <- which.min(abs(as.numeric(x - x0)))
i <- x[w]
ii <- index(x)[w] # 1-based index
l <- x[ii-1]
r <- x[ii+1]
yl <- if (ii == 1) { -Inf } else { as.numeric(y[l]) }
yr <- if (ii == n) { -Inf } else { as.numeric(y[r]) }
yi <- as.numeric(y[i])

# At a maximum?
if (yl <= yi && yr <= yi) {
return(i)
}

# Nope; go in the direction of greatest increase, breaking ties to the right.
if (yl > yr) {
return(climb(y, l))
} else {
return(climb(y, r))
}
}

关于r - 如何从给定的起点在 R 中进行爬山?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11215344/

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