Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 求两个向量的平均最大对_R_Vector_Max - Fatal编程技术网

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你能否将其作为一个新问题发布,因为不清楚你的预期。我发布了一个新问题。