【问题标题】:turning list of matrixes into a vector将矩阵列表转换为向量
【发布时间】:2015-01-30 15:22:40
【问题描述】:

我已经找到了许多相反的解决方案,但没有这样的解决方案。我有一个矩阵列表,需要将它们作为向量。我可以获取每个元素,为其命名,然后将其放入向量中。但我相信有更好的方法!

zerooklein <- lapply(1:10, function(x){genweb(10, 5, dens=2)})
zeroomittel <- lapply(1:10, function(x){genweb(10, 20, dens=2)})
zeroogroß <- lapply(1:10, function(x){genweb(10, 80, dens=2)})

这些是我的清单。

size <- c(this should contain all the singel matrices )
sizef <- sapply(size, function(x) nested(get(x), method="ALL"))
plot(capscale(formula = scale(sizef) ~ 1))

这就是我想对他们做的事情。

【问题讨论】:

  • 你的问题似乎没有意义。 nested 函数将 web 作为参数,而不是向量。您应该提供更多上下文,以便其他人可以理解您要完成的工作。更好的是,提供中间对象应该是什么样子的示例。
  • 我想在几个矩阵(zeroo)上应用几个指标(ALL)。所以size应该是(名称?)singel矩阵的向量。这样 nested 可以获取每个矩阵并在它们上应用所有方法。然后它应该返回一个向量,其中包含每个矩阵的计算指标。

标签: r list matrix vector


【解决方案1】:

如果您想使用 LISTS 的名称,请注意“zeroo...”对象不是向量,而是显式创建该向量。整个过程中唯一的向量就是下面一行:

size <- c("zerooklein", "zeroomittel", "zeroogroß")

现在剩下的就是所有列表和矩阵。你的每一个'zeroo...'对象都是一个矩阵列表,因此必须循环传递给nested。因此,您不仅需要遍历每个“zeroo...”对象,还需要遍历“zeroo...”中的每个矩阵,因此是一个双循环。以下调用完成了这项工作。

sizef <- lapply(size, function(x) sapply(get(x), function(y) nested(y, method="ALL")))

您不能只使用两个sapply 语句,否则它会自动将您的结果“绑定”在一起,这似乎不是您的目标。因此,此时您有一个包含三个矩阵的列表。您可以将它们与do.call 合并在一起。

size_merged <- do.call("cbind", sizef)

现在您可以绘制最终矩阵了

plot(capscale(scale(size_merged) ~ 1))

【讨论】: