我需要编写一个函数,根据给定的矩阵 BBB1 计算两个向量:A - 等于矩阵 BBB1 奇数行的元素积,B - 等于偶数行的乘积。同时,您需要在不使用循环的情况下执行此操作。我知道如何提取偶数/奇数行,但我不知道如何在没有循环的情况下将第 n 行相乘。
func <- function(BBB1) {
A <- 1
B <- 1
for (i in (1:dim(BBB1)[1])) {
if (i %% 2 == 0) B <- B*BBB1[i, ]
else A <- A*BBB1[i, ]
}
m <- list(A, B)
return(m)
}
所以我写下了这个函数,但只是通过一个循环。
示例:
"V1" "V2" "V3" "V4" "V5"
"1" 1 5 9 13 17
"2" 2 6 10 14 18
"3" 3 7 11 15 19
"4" 4 8 12 16 20
期望的结果:
Vector AA= 3 35 99 195 323
Vector BB= 8 48 120 224 360
最佳答案
使用回收的逻辑索引进行子集化,然后在 base R
中使用 prod
可能会更容易
apply(BBB1[c(TRUE, FALSE),], 2, prod)
V1 V2 V3 V4 V5
3 35 99 195 323
apply(BBB1[c(FALSE, TRUE),], 2, prod)
V1 V2 V3 V4 V5
8 48 120 224 360
或者使用matrixStats
中的colProds
library(matrixStats)
> colProds(as.matrix(BBB1[c(TRUE, FALSE),]))
[1] 3 35 99 195 323
> colProds(as.matrix(BBB1[c(FALSE, TRUE),]))
[1] 8 48 120 224 360
数据
BBB1 <- structure(list(V1 = 1:4, V2 = 5:8, V3 = 9:12, V4 = 13:16,
V5 = 17:20), class = "data.frame",
row.names = c("1",
"2", "3", "4"))
关于r - 如何在不使用循环的情况下将自己的矩阵的奇数行相乘以获得向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72408292/