从开始:如何向量化的代码中的R
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中更快和/或更优雅地编写代码。这个想法当然是要有比这个玩具例子大得多的矩阵。
这个例子的背景是根据chi-squared test的观察频率计算预期频率的矩阵。
请为'm.exp'和'm.obs'提供示例值(例如,使用'dput'避免循环)。 – 2015-03-31 12:58:44
@JoshuaUlrich:完成 – vonjd 2015-03-31 13:00:45
@JoshuaUlrich:我也加了一些背景信息 – vonjd 2015-03-31 13:11:06