以下是我尝试的代码
aaxab.res=NULL
chiaaxab <- for (i in 1:length(gt)) {
observed <- c(aa.count[i], ab.count[i])
expected <- c(0.5, 0.5)
chisq.test(observed, p=c(0.5, 0.5))$p.value
p.value <- ifelse(is.na(T.value ))
aaxab.res <- c(abxaa.res, p.value)
}
但我一直收到错误:
Error in chisq.test(observed, p = c(0.5, 0.5)) : at least one entry of 'x' must be positive.
有人可以帮助纠正这个问题,因为我是R的新手
答案 0 :(得分:0)
我认为您的意思是比较预期与观察到的情况,在这种情况下您的代码应该是:
...
chisq.test(observed, expected, p=c(0.5, 0.5))$p.value
...
当您的观察值均为零时,您将收到该错误。例如:
observed <- c(0, 0)
chisq.test(observed, p=c(0.5, 0.5))
chisq.test中的错误(观察到,p = c(0.5,0.5)): 至少有一个'x'条目必须为正
如果您的数据集有零(有时是正常的),并且您希望循环继续而不抛出错误,则可以添加条件语句来检查零:
chiaaxab <- for (i in 1:length(gt)) {
observed <- c(aa.count[i], ab.count[i])
expected <- c(0.5, 0.5)
if (aa.count[i] == 0 & ab.count[i] == 0) {
aaxab.res <- c(abxaa.res, NA)
} else {
chisq.test(observed, p=c(0.5, 0.5))$p.value
p.value <- ifelse(is.na(T.value))
aaxab.res <- c(abxaa.res, p.value)
}
}
如果检测到两个零,上面的代码将添加NA
。
也不确定你要用这一行完成什么:p.value <- ifelse(is.na(T.value))
。语法为:ifelse(test, yes, no)