【发布时间】:2017-02-22 18:51:28
【问题描述】:
我正在创建一个循环,用于计算名为“snp1”的变体的 Hardy-Weinberg 测试的功效(使用 HWPower 命令,来自 HardyWeinberg 包)。此命令需要输入 n(样本大小)和 pA(次要等位基因频率)。我必须用大量的 ns 和 pAs 进行多次单独的计算,因为它们代表不同的人口样本,所以我手动完成了前两个,但现在我想为所有其他人创建一个 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
我不知道导致不一致的问题出在哪里。这很奇怪,因为它只在第一个结果中,而不是在第二个结果中(第二个计算的功率还可以,它给了我相同的结果,但第一个没有)。
【问题讨论】:
-
您将
HWpowersnp1<-numeric(2)定义为大小为 2 的数字数组,因此您应该在循环结束时获得两个值。在第二次调用时,它返回一个应有的标量值。