找到两个向量的平均最大配对

时间:2017-05-02 06:17:42

标签: r vector max

我有一个整数变量res,它存储从一个向量到另一个向量的每个元素的总和,其中结果保持跟踪。

a <- 1:3
b <- 4:6
nm <- outer(seq_along(a), seq_along(b), FUN = function(x, y) sprintf('a%d + b%d', x, y))
res <- setNames(c(outer(a,b,`+`)), nm)

res 
#   a1 + b1 a2 + b1 a3 + b1 a1 + b2 a2 + b2 a3 + b2 a1 + b3 a2 + b3 a3 + b3 
#      5       6       7       6       7       8       7       8       9 

如何找到每个唯一对的最大值?假设a3 + b3 = 9是最大值,那么在第二次迭代中,包含a3b3的任何对都将被省略,我们将留下:

res 
#   a1 + b1 a2 + b1 a1 + b2 a2 + b2 
#      5       6         6       7       

下一个最大值为a2 + b2 = 7,然后在最后一次迭代中,省略了a2b2的所有对,我们留下:

res 
#   a1 + b1  
#      5  

然后我们可以平均最大配对,即(9+7+5)/3 = 3

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:2)

我们可以使用repeat创建一个函数来分配从删除具有最大值的元素(通过grep命名向量的名称到原始向量的子集)所导致的输出,直到它到达length为1

f1 <- function(x) {
  x1 <- max(x)
 repeat {
  x <- x[!grepl(sub(" \\+ ", "|", names(which.max(x))), names(x))]
  x1 <- c(x1, max(x))
  if(length(x)==1) break
   }
  return(list(x, mean(x1)))

 }

f1(res)
#[[1]]
# a1 + b1 
#   5 

#[[2]]
#[1] 7