首页 > 解决方案 > 为什么 R 请求额外的 TRUE/FALSE

问题描述

我正在尝试计算随机生成的 DNA 链中 ATG 密码子的数量并创建直方图:

s1 = makeDNA(500)    
count = 0
n = 100
totCount = vector("numeric", n)
for(j in 1:n){
  s1 = makeDNA(500) 
  count = 0
  for(i in 1:500){
    if(s1[i] == "A" & s1[i+1] == "T" & s1[i+2] == "G"){
      count = count + 1
    }
  }
  totCount[j] = count
}

当我运行此代码时,R 给出以下错误:

Show in New WindowClear OutputExpand/Collapse Output
Error in if (s1[i] == "A" & s1[i + 1] == "T" & s1[i + 2] == "G") { : 
  missing value where TRUE/FALSE needed

标签: rbioinformatics

解决方案


问题出在这段代码中:

for(i in 1:500){
    if(s1[i] == "A" & s1[i+1] == "T" & s1[i+2] == "G"){
      count = count + 1
    }

什么时候i == 499,那么i + 2 == 501。该对象s1只有 500 个元素长。没有第 501 个元素,所以 R 返回NA。没有什么是等于NA, 甚至NA, 所以你的逻辑运算符返回NA, 当 a TRUEorFALSE被期望时。修改为以下,你应该是好的。

for(i in 1:498){
        if(s1[i] == "A" & s1[i+1] == "T" & s1[i+2] == "G"){
          count = count + 1
        }

推荐阅读