1

我是 R 的新用户。我有两个向量ab. 我想找出在 vector 的每个区间中哪些元素b具有函数的全局最大值。例如y = 2ba

    a = c(1, 3, 6, 7)
    b = c(1.1, 1.8, 2.3, 4.5, 6.8, 7.9, 3.3)

表示1.1, 1.8, 2.3介于 之间1 and 3,但其中哪个函数的值最大y,以此类推...

4

1 回答 1

2

cut找出如何b在 提供的断点处切割a,然后split列出一个列表,每个区间一个,最后sapply问每个区间的问题

> sapply(split(b, cut(b, a)), function(x) x[which.max(2*x)])
(1,3] (3,6] (6,7] 
  2.3   4.5   6.8

如果间隔之一的值为零,这仍然有效

b <- c(1.1, 1.8, 6.8, 7.9)
res <- sapply(split(b, cut(b, a)), function(x) x[which.max(2 * x)])

现在返回的是一个列表,其中numeric()包含零值区间的条目。结果res可以简化为

> res[sapply(res, length) == 0] <- NA
> unlist(res)
(1,3] (3,6] (6,7] 
  1.8    NA   6.8 

或者,可以在搜索最大值之前删除区间split(b, cut(b, a), drop=TRUE)

于 2013-04-05T00:13:58.877 回答