从...开始:

m <- matrix(c(12,9,8,31), nrow=2)
(m.obs <- m.exp <- addmargins(m, FUN=sum, quiet=T))

我有以下代码:

m.exp[1,1] <- m.obs[1,3] / m.obs[3,3] * m.obs[3,1]
m.exp[1,2] <- m.obs[1,3] / m.obs[3,3] * m.obs[3,2]
m.exp[2,1] <- m.obs[2,3] / m.obs[3,3] * m.obs[3,1]
m.exp[2,2] <- m.obs[2,3] / m.obs[3,3] * m.obs[3,2]

这可以写成嵌套循环,如下所示:

for (row in 1:2) {
  for (column in 1:2) {
    m.exp[row,column] <- m.obs[row,3] / m.obs[3,3] * m.obs[3,column]
  }
}

我的问题是这是否也可以用矢量化形式编写。 是否可以通过不同的方式对这段代码进行矢量化? 或者还有其他方法可以简化它吗?

我的目标是找到不同的可能性,说明如何在R中使代码更快和/或更优雅。这个想法当然是要有比这个玩具示例大得多的矩阵。

该示例的背景是从卡方检验的观察频率计算预期频率的矩阵。

#1楼 票数:2 已采纳

尝试这个

(m.obs[-3, 3]/ m.obs[3,3]) %*% t(m.obs[3, -3])

#2楼 票数:1

您可以通过将其编写为避免循环

m.exp[1:2, 1:2] <- m.obs[rep(1:2, 2), 3] *
    m.obs[3, rep(1:2, each = 2)] / m.obs[3,3]

  ask by vonjd translate from so

未解决问题?本站智能推荐:

2回复

在R中向量化for循环

我试图通过受益于 R 的矢量化来改进我的代码,比如使用更多的应用系列函数而不是 for 循环,因为我使用的数据集达到 300K 记录,我希望能够减少脚本的时间跑步。 我已经准备了一个 repex 以及实际的 for 循环,我只是不知道是否可以将其转换为非循环结构。 它是这样的: 快速解释数据:它有一
2回复

如何在R中向量化(并加快)此递归图搜索功能?

我在R中编写了一个递归函数,用于查找有向图的路径st的所有路径(无循环)。 我使用此页面作为模型: 在有向树(igraph)中从一个节点到另一个节点的所有可能路径,并且它输出正确的结果,但是速度很慢。 小图没什么大不了的。 对于大图,这是一个问题。 我是R的新手,但已阅读它在避免循环和
1回复

当数据在列表中时,我可以向量化代码吗?

我正在优化我的代码,我遇到了一些问题。 我知道R中最大的速度来自矢量化代码而不是使用循环。 但是,我在列表中有我的数据,我不确定我是否可以对代码进行矢量化。 我已经尝试过使用apply函数(比如lapply , vapply ),但我读到这些函数只是为了编写更干净的代码而且实际上是在引擎盖
3回复

向量化包含循环和if子句的搜索函数

我得到了两个非常大的数据集,并且我一直在尝试构建一个函数,该函数可以从一个集合中找到某些坐标,这些坐标尊重关于另一个数据集的if子句。 我的问题是我编写的功能非常慢 ,尽管我一直在以类似的方式阅读类似问题的答案,但我仍未能使其正常工作。 因此,如果给我: 和 对于href数据集中s
1回复

如何在R中向量化功能

我需要一些帮助对以下代码进行矢量化处理,因为我相信它将变得更加高效。 但是我不知道该如何开始...我创建了一个遍历z的循环。 z具有3列和112847行,这可能是花费较长时间的原因。 3列包含在MACD()函数中使用的数字... 我想知道如何对MACD()函数进行矢量化处理,以加快处理
3回复

如何在R中向量化此循环

我在R方面没有太多经验。我正在尝试编写Gibbs采样器,其中有如下这样的for循环: 这花费了太多时间。 我尝试使用lapply但这还不够快。 有没有办法向量化这个循环? 感谢你并致以真诚的问候!!
2回复

如何在R中向量化2个循环

我有两个矩阵: 和向量x 。 length(x) = k向量x包含值1 : m 我必须执行以下操作,已使用for循环解决了该操作。 有某种方法可以向量化它吗? 还是可以使用某些技术来加快计算速度? PS我考虑使用基本并行化,但是我想找到更多聪明的方法
2回复

如何在R中向量化此过程?

如何在不使用太多循环的情况下在R中向量化此过程? 我有这个功能: 基本上,我需要为{CO,CS,CD,CSD}的每种组合获取HM值: 所以我需要获取这些值: 基本上都是3个元素的4个向量的组合: 我不确定如何计算组合数量。 当然,我可以使用4个嵌套循环,但是我想学习如何使用