Функция R для автоматического объединения векторов и сохранения их как переменных - PullRequest
0 голосов
/ 11 марта 2020

У меня есть вектор векторов, скажем

c(a,b,c)

, где a, b, c - ранее сохраненные векторы с одинаковой длиной. Я хочу создать функцию в R, которая автоматически объединит все элементы в этом векторе и сохранит их как переменные в векторе продуктов (векторное умножение), или более явно:

function(c(a,b,c))= c(ab,ac,bc,abc)

Как мне это сделать? Спасибо

1 Ответ

0 голосов
/ 11 марта 2020

Вы можете использовать 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), информация о том, какое значение принадлежало исходному вектору, теряется.

...