我正在为一个名为' snp1'的变种计算Hardy-Weinberg检验能力的循环。 (使用HWPower命令,来自HardyWeinberg包)。该命令需要输入n(样本大小)和pA(次要等位基因频率)。我必须使用大量的ns和PA分别进行多次计算,因为它们代表不同的人口样本,所以我手动完成前两个,但现在我想为所有其他人做一个for循环。 我从一个简单的循环开始,前两个,所以我可以很容易地检查结果是否正常(因此,循环工作正常)。但是在比较两次计算的结果时我遇到了一个问题,这让我觉得我的代码并不完全正常。
install.packages("HardyWeinberg")
library(HardyWeinberg)
snp1n=c(661,503)
snp1pA=c(0.006051,0.174)
HWpowersnp1<-numeric(2)
for(i in seq_along(snp1n)) {
for(j in seq_along(snp1pA)) {
HWpowersnp1[i]<-HWPower(n=snp1n[i],pA=snp1pA[j])
}
}
HWpowersnp1
这给了我以下矢量:
HWpowersnp1
[1] 0.04109278 0.04253145
但是当我单独使用该功能计算每一个时,我得到:
HWPower(n = 661,pA = 0.006051)
[1] 0.02107572
HWPower(n = 503, nA = 175)
[1] 0.04253145
我不知道导致不一致的问题在哪里。这很奇怪,因为它只在第一个结果中,而不在第二个结果中(第二个计算的功率是好的,它给了我相同的结果,但第一个没有)。
答案 0 :(得分:0)
您的双循环错误。如果你运行这个
for(i in seq_along(snp1n)) {
for(j in seq_along(snp1pA)) {
print(paste(i,j))
HWpowersnp1[i]<-HWPower(n=snp1n[i],pA=snp1pA[j])
}
}
您将看到您的功能正在运行4次,而不是您期望的两次。您希望同时迭代snp1n
和snp1pA
。因此,您应该使用mapply
或Map
。试试这个
HWpowersnp1 <- Map(HWPower, n=snp1n, pA=snp1pA)