【问题标题】:R function for automated combining vectors and storing them as variables用于自动组合向量并将它们存储为变量的 R 函数
【发布时间】:2020-03-11 13:22:49
【问题描述】:

我有一个向量的向量,比如说

c(a,b,c)

其中 a、b、c 是先前存储的等长向量。我想在 R 中创建一个函数,该函数自动组合该向量中的所有元素并将它们作为变量存储在乘积向量中(向量乘法),或者更明确地说:

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

我应该怎么做?谢谢

【问题讨论】:

  • 警告一个vector的vector是一个vector : c(1:2, 1:3) is [1] 1 2 1 2 3
  • fun <- function(...) c(...) 也许?用法:fun(a, b, c).
  • 如果a 和b 是向量,那么ab 会是什么? c(a, b) ?或者既然你也提到了 product 向量a * b?
  • 什么是“产品向量”?产品的载体?如果是,a、b 和 c 是否总是等长?
  • 是的,我的意思是矩阵乘法的乘积向量。是的,a、b、c 总是等长

标签: r function loops


【解决方案1】:

您可以使用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

但是,正如我所展示的,您需要使用 list(a, b, c) 或 ... 而不是 c(a, b, c)。如果使用c(a, b, c),则丢失了哪个值属于哪个原始向量的信息。

【讨论】:

  • 这太棒了。我不知道我可以使用 seq_along 来索引向量列表。谢谢
猜你喜欢
  • 1970-01-01
  • 2016-11-27
  • 2021-06-25
  • 1970-01-01
  • 2017-01-18
  • 1970-01-01
  • 2016-09-23
  • 2019-09-20
  • 1970-01-01
相关资源
最近更新 更多