4 rowSums * 2 colSum для получения 8 значений ячеек - PullRequest
1 голос
/ 12 апреля 2020

Это, наверное, просто, но почему-то мне не хватает этого. Если я создаю матрицу следующим образом:

m <- matrix(c(154,180,104,438,132,126,131,389),ncol=2)

Я затем умножаю на

e <- rowSums(m)*colSums(m)

Получается e только для каждого значение из вектора 1-й суммы умножается на вектор 2-й суммы (при повторной обработке 2-го) для получения:

[1] 250536 238068 205860 643406

То, что я на самом деле хочу получить, - это получить матрицу из 8 значений, где каждое значение ячейки: rowSums (i) * colSums (k), где i = от 1 до 4 и k = от 1 до 2

Ответы [ 2 ]

1 голос
/ 12 апреля 2020

Проблема в том, что R перерабатывает векторы, когда они имеют разную длину. Вы можете получить нужный ответ, используя оператор умножения матриц% *%.

e <- rowSums(m) %*% t(colSums(m))
1 голос
/ 12 апреля 2020

Вы можете получить произведение каждого элемента в x с каждым элементом в y с помощью функции outer.

m <- matrix(c(154,180,104,438,132,126,131,389),ncol=2)
x <- rowSums(m)
y <- colSums(m)

outer(x, y)
#>        [,1]   [,2]
#> [1,] 250536 222508
#> [2,] 268056 238068
#> [3,] 205860 182830
#> [4,] 724452 643406

Создано в 2020-04-12 путем представьте пакет (v0.3.0)

Если вы знакомы с обозначениями линейной алгебры, следующее делает то же самое:

x %*% t(y)
#>        [,1]   [,2]
#> [1,] 250536 222508
#> [2,] 268056 238068
#> [3,] 205860 182830
#> [4,] 724452 643406

Внешняя функция также может использоваться для других операций, кроме умножения:

outer(x, y, "+")
#>      [,1] [,2]
#> [1,] 1162 1064
#> [2,] 1182 1084
#> [3,] 1111 1013
#> [4,] 1703 1605
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...