Мы можем преобразовать в 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)