Вы можете использовать combn
и некоторые lapply
и Reduce
петли:
foo <- function(...) {
args <- list(...)
res <- lapply(seq_along(args)[-1], function(i)
lapply(combn(list(a, b, c), i, simplify = FALSE),
function(x) Reduce(`*`, x))
)
unlist(res, FALSE)
}
a <- 1:3
b <- 4:6
c <- 7:9
foo(a, b, c)
#[[1]]
#[1] 4 10 18
#
#[[2]]
#[1] 7 16 27
#
#[[3]]
#[1] 28 40 54
#
#[[4]]
#[1] 28 80 162
Однако вместо c(a, b, c)
вам нужно использовать list(a, b, c)
или ...
, как я покажу , Если вы используете c(a, b, c)
, информация о том, какое значение принадлежало исходному вектору, теряется.