Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.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 - Fatal编程技术网

R 如何将向量中的一组元素与矩阵相乘,将所有其他元素设置为零

R 如何将向量中的一组元素与矩阵相乘,将所有其他元素设置为零,r,R,我正在寻找一种方法,在一个向量中选择一组元素并将其与一个矩阵相乘,同时将其他元素设置为零,然后对下一组重复此过程 比如让 a <- c(2:7) b <- matrix(1:36, byrow = FALSE, nrow = 6) 将a定义为有三个组: 第1组的元素1和元素2 第2组的要素3和4 第3组的要素5和6 r如何将向量a组1与b组相乘,并将其他所有设置为零(23000),然后重复第2组(04500)和第3组(00067)?以下是获得结果的一种方法: k <- 2

我正在寻找一种方法,在一个向量中选择一组元素并将其与一个矩阵相乘,同时将其他元素设置为零,然后对下一组重复此过程

比如让

a <- c(2:7)
b <- matrix(1:36, byrow = FALSE, nrow = 6)
将a定义为有三个组:

  • 第1组的元素1和元素2
  • 第2组的要素3和4
  • 第3组的要素5和6

r如何将向量a组1与b组相乘,并将其他所有设置为零(
23000
),然后重复第2组(
04500
)和第3组(
00067
)?

以下是获得结果的一种方法:

k <- 2
v <- rep(1:(length(a) %/% k), each = k)
sapply(unique(v), function(n) a[which(v == n)] %*% b[which(v == n), ])
#      [,1] [,2] [,3]
# [1,]    8   32   72
# [2,]   38   86  150
# [3,]   68  140  228
# [4,]   98  194  306
# [5,]  128  248  384
# [6,]  158  302  462

到目前为止你试过什么?包括一个代码示例,你将更有可能得到一个有用的答案。还有,为什么不使用你在那里创建的三个向量,为什么从一个向量开始呢?我正在使用的数据集比这里的示例大得多,你的方法可行,但不知道代码如何工作,因为对于代码,我可能会尝试一个循环,c在一般情况下,这些群体是什么样的?要素1、2;3,4; ...; n-1,n?或者它们是以某种形式提供的?
k <- 2
v <- rep(1:(length(a) %/% k), each = k)
sapply(unique(v), function(n) a[which(v == n)] %*% b[which(v == n), ])
#      [,1] [,2] [,3]
# [1,]    8   32   72
# [2,]   38   86  150
# [3,]   68  140  228
# [4,]   98  194  306
# [5,]  128  248  384
# [6,]  158  302  462
sapply(unique(v), function(n) a[v == n] %*% b[v == n, ])