matrix1 = matrix(rnorm(3*4), 3, 4)
apply(matrix1, 1, "+")
Делает что-то похожее на транспонирование, потому что оно предоставляет строки объекта matrix1 одну за другой и возвращает значения каждой операции в виде столбцов. Если вы указали с другой стороны:
apply(matrix1, 2, "+")
Не было бы появления транспонирования, потому что apply всегда возвращает свои значения как основной результат столбца.
Во втором случае вы не передали второй аргумент оператору "%*%
". Оператор «+» может быть как унарным, так и двоичным, но оператор «%*%
» всегда двоичный. (На самом деле не имеет большого смысла использовать «%*%
» с apply
и одним измерением, поскольку «%*%
» действительно разработан как отдельный оператор. Если вы хотите получить сумму по строке, просто Применение:
rowSums(matrix1)
Но вы могли бы использовать медленнее:
apply(matrix1, 1, sum)
Для использования продукта:
apply(matrix1, 1, prod)
Ни +, ни %*%
не предназначены для сворачивания их аргументов в одно значение в отличие от sum
и prod, разработанных таким образом.
Ответить на комментарий. Оператор %*%
выполняет операцию умножения матрицы. I-столбцы первого аргумента умножаются на J-строки и суммируются, чтобы получить элемент i-j новой матрицы. Многие математические операции со статистическим или физическим значением, которые в противном случае потребовали бы двойного цикла for, могут быть выполнены умножением матрицы. Давайте представим, что ваша матрица представляла собой набор значений данных, и вы хотели создать прогноз для каждой строки на основе модели с тремя коэффициентами, равными, скажем, c (5,6,7):
c(5,6,7) %*% matrix1
# [,1] [,2] [,3] [,4]
#[1,] 2.047344 10.02339 1.73618 0.7223964