R 求两个向量的平均最大对
我有一个整数变量R 求两个向量的平均最大对,r,vector,max,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 a
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
下一个最大值是a2+b2=7
,然后在上一次迭代中,省略了a2
或b2
的任何对,剩下的是:
res
# a1 + b1 a2 + b1 a1 + b2 a2 + b2
# 5 6 6 7
res
# a1 + b1
# 5
然后我们可以平均最大配对,即(9+7+5)/3=3
如何实现这一点?我们可以使用
repeat
创建一个函数,以指定从移除元素中获得的输出具有最大值(通过grep
将命名向量的名称与原始向量子集化),直到其长度达到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
f1通过grep
res[!grepl(sub(\\+”,“|”)、name(which.max(res))、names(res))][/code>不应表示(9+7+5)/3=7的如果f1()中的语句
当变量a
和b
的长度改变时?i、 e.length(a)=10
和length(b)=15或20或25
,这样a
的长度是固定的,但b
的长度可以是5的任意倍数?@jacky\u学会了\u to\u code你能否将其作为一个新问题发布,因为不清楚你的预期。我发布了一个新问题。