【发布时间】:2014-03-25 09:30:05
【问题描述】:
所以我有一个表m,由随机数量的行和列组成。 (可以是任何大小)...
我想对每行/列的总计进行此计算:
r[i] * c[j] / n;
其中r <- rowSums(m);、c <- colSums(m); 和n <- sum(m);
我可以使用双 for 循环来实现,但我希望现在使用 while 循环来实现它。
我不打算使用 while 循环,但似乎表大小可以不同,我认为这也是明智的。
我将每个值存储在test 向量中。
这是我的尝试,但我搞砸了索引:
while(i < nrow(m)){
while(j < ncol(m)){
test[i] <- r[i]*c[j] / n;
j=j+1;
i=i+1;
}
j=j+1;
i=i+1;
}
任何帮助我整理循环的指导将不胜感激。提前致谢。
更新
请参阅下面的示例和预期结果:
m <- t(matrix(c(28,48,10,114), nrow=2, ncol=2));
r <- rowSums(m); #76 124 (sum of rows)
c <- colSums(m); #38 162 (sum of cols)
n <- sum(m); #200 (sum of all cells)
test <- c(0, times length(m)); #empty vector/data frame
#inside while loops, calc for each r and c indice:
test[1] <- 76 *38 /200 #first calc to test[i] where i=1
test[2] <- 124*38 /200
test[3] <- 76*162 /200
test[4] <- 124*162/200 #last calc to test[i] where i==length(m)
【问题讨论】:
-
也许,
outer在这里有用。类似outer(r, c, function(x, y) x * y / n) -
您能否添加一个具有预期输入/输出的实际示例?由于 R 是矢量化的,只需运行
r * c / n即可将行总和与相应的列总和相匹配,然后除以总和......当你说三行十列时,不清楚你想要发生什么......如何数据应该被回收吗? -
我添加了一个示例。我希望这能让我更清楚我想要实现的目标。感谢您发布。附言。所有行总数(无论是 3 还是 500)都需要使用曾经的列总数(无论是 3 还是 500)来计算。
标签: r while-loop nested-loops