Я пытался написать обобщенную функцию, которая умножает каждое значение в каждой строке матрицы на соответствующее значение вектора с точки зрения их положения (то есть матрица [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]
(End Edit)
Я также попытался установить длину дляe new.vector должен быть равен ncells, но я не думаю, что это принесло пользу:
length(new.vector) = ncells
Мой вопрос заключается в том, как я могу заставить новый вектор принимать итоговые суммы умноженных элементовстрока матрицы по соответствующему значению вектора.
Надеюсь, я все ясно и заранее спасибо!