【发布时间】:2017-11-24 19:07:12
【问题描述】:
所以我正在使用如下矩阵处理 R:
diff_0
SubPop0-1, SubPop1-1, SubPop2-1, SubPop3-1, SubPop4-1,
SubPop0-1, NA NA NA NA NA
SubPop1-1, 0.003403100 NA NA NA NA
SubPop2-1, 0.005481177 -0.002070277 NA NA NA
SubPop3-1, 0.002216444 0.005946314 0.001770977 NA NA
SubPop4-1, 0.010344845 0.007151529 0.004237316 -0.0021275130 NA
...但更大;-)。
这是每个 SubPop 之间从 0 到 4 的成对遗传差异矩阵。我想获得每个 subPop 的平均差异值。
例如,对于 SubPop-0,平均值仅对应于第 1 列中 4 个值的平均值。但是对于 SubPop-2,这将是第 3 行中的 2 个值和第 2 行中的值的平均值第 3 列,因为这是一个半矩阵。
考虑到这一点,我想编写一个 for 循环来计算每个 SubPop 的每个平均值。我尝试了以下方法:
Mean <- for (r in 1:nrow(diff_0)) {
mean(apply(cbind(diff_0[r,], diff_0[,r]), 1, sum, na.rm=T))
}
首先,这隔离了索引 [r] 的每一行和每一列,其值引用相同的 SubPop r。 “sum”可以收集这些值并消除“NA”。最后我得到了我的 SubPop r 的平均值。我希望我的 for 循环能给我每个索引 r 的值,这将是一个 SubPop。
然而,尽管我的mean(apply(cbind(diff_0[r,], diff_0[,r]), 1, sum, na.rm=T)),如果单独运行一个介于 1 和 5 之间的固定 r 值,确实给了我想要的;那么'for循环'本身只返回一个空向量。
for (r in 1:nrow(diff_0)) { print(diff_0[r,1]) } 之类的东西也可以,所以我不明白发生了什么。
这是一个微不足道的问题,但我在互联网上找不到答案!虽然我知道我可能错过了明显的:-)...
非常感谢, 干杯!
【问题讨论】: