Как получить произведение всех комбинаций значений по столбцам? - PullRequest
2 голосов
/ 15 января 2020

например, если у меня есть следующая матрица

> matrix(c(1, 1:8), nrow = 3)
     [,1] [,2] [,3]
[1,]    1    3    6
[2,]    1    4    7
[3,]    2    5    8

, то как получить вектор произведения всех комбинаций значений по столбцу (указанному ниже)?

пожалуйста обратите внимание, что 1 повторяется дважды

1 * 3 * 6
1 * 3 * 7
1 * 3 * 8

1 * 4 * 6
1 * 4 * 7
1 * 4 * 8

1 * 5 * 6
1 * 5 * 7
1 * 5 * 8

1 * 3 * 6
1 * 3 * 7
1 * 3 * 8

1 * 4 * 6
1 * 4 * 7
1 * 4 * 8

1 * 5 * 6
1 * 5 * 7
1 * 5 * 8

2 * 3 * 6
2 * 3 * 7
2 * 3 * 8

2 * 4 * 6
2 * 4 * 7
2 * 4 * 8

2 * 5 * 6
2 * 5 * 7
2 * 5 * 8

1 Ответ

2 голосов
/ 15 января 2020

Мы можем преобразовать в data.frame, сделать expand.grid в столбцах, а затем Reduce, умножив каждую строку

Reduce(`*`, expand.grid(as.data.frame(m1)))

Или на tidyverse

library(dplyr)
library(tidyr)
library(purrr)
expand_grid(V1 = m1[,1], V2 = m1[,2], V3 = m1[, 3]) %>%
     transmute(out = reduce(., `*`)) %>%
     pull(out)
#[1] 18 21 24 24 28 32 30 35 40 18 21 24 24 28 32 30 35 40 36 42 48 48 56 64 60 70 80

Или с использованием data.table

library(data.table)
as.data.table(m1)[, Reduce(`*`, do.call(CJ, .SD))]

data

m1 <- matrix(c(1, 1:8), nrow = 3) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...