我一直在为同样的问题而苦苦挣扎,但相信我找到了解决方案。
问题在于,该步骤使table
每个“群体”的单倍型计数按字母顺序对单倍型进行排序。因此,例如,单倍型“IX”位于“V”之前。另一方面,函数haplotype()
按“数字”顺序对单倍型进行排序。这就是绘图时产生差异的原因。
这可以通过按“标签”对单倍型对象进行排序来解决,如中所述?haplotype
help.
我将使用woodmouse
示例数据:
# Sample 9 distinct haplotypes
library(pegas)
data(woodmouse)
x <- woodmouse[sample(9, 100, replace = T), ]
为了简化,我创建了一个函数来创建单倍型计数表(基于这个帖子):
countHap <- function(hap = h, dna = x){
with(
stack(setNames(attr(hap, "index"), rownames(hap))),
table(hap = ind, pop = attr(dna, "dimnames")[[1]][values])
)
}
现在,让我们看看没有对单倍型进行排序的结果:
h <- haplotype(x) # create haplotype object
net <- haploNet(h) # create haploNet object
plot(net, pie = countHap(), size = attr(net, "freq"), legend = T)
现在,让我们看一下计数表,检查这些结果:
countHap(h, x)
pop
hap No0906S No0908S No0909S No0910S No0912S No0913S No304 No305 No306
I 0 0 0 0 0 0 0 8 0
II 0 0 0 0 0 0 9 0 0
III 0 0 0 0 0 0 0 0 10
IV 16 0 0 0 0 0 0 0 0
IX 0 0 0 0 0 8 0 0 0
V 0 12 0 0 0 0 0 0 0
VI 0 0 10 0 0 0 0 0 0
VII 0 0 0 13 0 0 0 0 0
VIII 0 0 0 0 14 0 0 0 0
事情不匹配:例如,单倍型“V”应该出现在个体“No0908S”中,但却被着色为个体“No0913S”(这应该是单倍型“IX”的标签)。
现在,让我们对单倍型进行排序:
h <- haplotype(x)
h <- sort(h, what = "labels") # This is the extra step!!
net <- haploNet(h)
plot(net, pie = countHap(), size = attr(net, "freq"), legend = T)
现在一切都很好!
Extra:
虽然OP没有要求这样做,但如果其他人感兴趣的话,我想把它留在这里。
有时,我发现按频率标记单倍型很方便。这可以通过将单倍型标签更改为等于它们的频率来完成:
attr(h, "labels") <- attr(h, "freq")
plot(net, pie = countHap(), size = attr(net, "freq"), legend = T)