如何使广义函数更新向量的值?

时间:2018-06-09 13:03:19

标签: r matrix vector

我一直在尝试编写一个广义函数,它将矩阵每行中的每个值乘以矢量的位置(即矩阵[1,1] *向量[1],矩阵[] 1,2] * vector [2]等)然后将它们加在一起。值得注意的是,向量的长度和矩阵的行总是相同的,这意味着在每一行中,向量的第一个值乘以矩阵行的第一个值。我认为同样重要的是,矩阵的行和列的长度相等。每行的结束总和应分配给不同的现有向量,其长度等于行数。

这是矩阵和向量:

a <- c(4, -9, 2, -1)
b <- c(-1, 3, -8, 2)
c <- c(5, 2, 6, 3)
d <- c(7, 9, -2, 5)
matrix <- cbind(a,b,c,d)

      a  b c  d
[1,]  4 -1 5  7
[2,] -9  3 2  9
[3,]  2 -8 6 -2
[4,] -1  2 3  5

vector <- c(1, 2, 3, 4)

这些是我必须概括矩阵的行和列以及长度为“ n ”的矢量的基本函数:

f.1 <- function() {
    (matrix[1,1]*vector[1] 
     + matrix[1,2]*vector[2] 
     + matrix[1,3]*vector[3]
     + matrix[1,4]*vector[4])
}
f.2 <- function() {
    (matrix[2,1]*vector[1] 
     + matrix[2,2]*vector[2] 
     + matrix[2,3]*vector[3] 
     + matrix[2,4]*vector[4])
}

and so on...

这是我写的功能:

ncells = 4

f = function(x) {
i = x
result = 0
for(j in 1:ncells) {
result = result + vector[j] * matrix[i][j]
}
return(result)
}

调用该函数:

result.cell = function() {
for(i in 1:ncells) {
new.vector[i] = f(i)
}
}

此结果应分配到的向量(即new.vector)已事先定义:

new.vector <- c()

我预计每行的结束总和将以相应的方式分配给向量(例如,如果所有行的总和为1,2,3,4等,则new.vector(1,2, 3,4等,但它没有发生。

(编辑)当我使用基本功能执行此操作时,分配有效:

new.vector[1] <- f.1()
new.vector[2] <- f.2()

然而,这不适用于广义函数:

new.vector[1:ncells] <- result cell[1:ncells]

(结束编辑)

我也尝试将new.vector的长度设置为等于ncells,但我认为它没有任何好处:

length(new.vector) = ncells

我的问题是如何使新向量将矩阵行的相乘元素的总和乘以向量的相应值。

我希望我事先明确并表示感谢!

1 个答案:

答案 0 :(得分:2)

这里不需要循环,我们可以使用R的矩阵乘法功效,然后将行与title_DESC相加。请注意,rowSumsm用作vmatrix的名称,以避免与这些函数名冲突。

vector

但是,如果向量nr <- nrow(m) rowSums(m * matrix(rep(v, nr), nr, byrow = TRUE)) # [1] 45 39 -4 32 始终是列号,我们只需使用v函数作为乘数。

col

数据:

rowSums(m * col(m))
# [1] 45 39 -4 32