R: как использовать символы в качестве FUN для применения? - PullRequest
0 голосов
/ 30 июня 2018

В документации R для применения указано:

FUN: функция, которую нужно применить: см. «Детали». В случае таких функций, как +,% *% и т. Д., Имя функции должно быть заключено в кавычки или заключено в кавычки.

Я не понимаю последнюю половину предложения.

Когда я делаю

     matrix1 = matrix(rnorm(3*4), 3, 4)
     apply(matrix1, 1, "+")

Я получаю транспонирование матрицы

И когда я делаю

     apply(matrix, 1, "%*%")

Я получаю ошибку.

Я пытаюсь получить построчную сумму и произведение этой матрицы.

Кроме того, если это не то, о чем говорится в документации, что делать + и% *% должны делать, когда они предоставляются в качестве аргумента FUN для применения?

1 Ответ

0 голосов
/ 30 июня 2018
 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...