【发布时间】:2017-09-29 22:56:20
【问题描述】:
我有一个整数变量res,它存储从一个向量到另一个向量的每个元素的总和,结果被跟踪。其中length(a) = 10 和length(b) = 10 or 15 or any length > length(a).
a <- 1:10
b <- 1:15
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 a4+b1 a5+b1 ... a6+b15 a7+b15 a8+b15 a9+b15 a10+b15
# 2 3 4 5 6 ... 21 22 23 24 25
如何找到每个唯一对的最大值?假设a10 + b15 = 25 是最大值,那么在第二次迭代中,任何包含a10 或b15 的对都将被忽略。重复此过程,直到没有唯一的对。
如何修改以下函数中的if 语句以找到最大唯一配对的平均值?还是有别的办法?
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)))
}
注意:这个问题是我之前question的后续问题。
【问题讨论】:
-
我不清楚你的情况。您是说如果最大值在
a7 + b9中,那些名称中包含 a7 或 b9 的元素将不会被省略?或者像a5 + b10、a10 + b15、a10 + b5、a5 + b15、a5 + b5、a10 + b10还有其他组合吗? -
反之,如果最大值在
a7 + b9中,那么名称中包含a7或b9的元素将被省略。那么在下一次迭代中,如果最大值在a3 + b3中,那么a3或b3将被移除,以此类推…… -
我对 5 部分的倍数感到困惑。您的预期输出是什么?
-
使用您以前的解决方案将
a更改为a <- 1:10和b为b <- 1:15,我遇到了此警告no non-missing arguments to max; returning -Inf。也许这个错误解释了我想要解决的问题,即当a和b的长度不相等时。很抱歉将您与 5 部分的倍数混淆。