if for循环中的if语句:具体示例

时间:2017-03-29 17:34:47

标签: r if-statement bioinformatics

我正在写一个比较两个数据帧的短代码 - list& knownlocation。我想知道列表中的每个项目是否属于已知位置。

colnames(list) <- c("gene_symbol", "chromo", "start", "end")
colnames(knownlocation) <- c("snp", "chr", "s", "e")

为了找到这个,我编写了代码,在“list”中创建一个新列,说明TRUE或FALSE是否在任何已知位置:

for (i in 1:nrow(list)) {
for (j in 1:nrow(knownlocation)) {
if ( (list[i, 2] == knownlocation[j, 2]) && (list[i, 3] >= knownlocation[j, 3]) && (list[i, 4] <= knownlocation[j, 4]) ) {
list[i, 5] = "TRUE" }
else { list[i, 5] = "FALSE"}
}}

这段代码看起来很好,它运行没有错误。问题是整个列表显示为FALSE,即使它确实属于knownlocation中的某个位置。任何人都能找到一些我错过的明显错误的东西吗?

1 个答案:

答案 0 :(得分:1)

问题是else子句将在先前找到FALSE的实例上用TRUE覆盖。基本上,您只希望在满足条件时存储TRUE,但在执行循环之前将所有值初始化为FALSE

尝试删除else子句。

要使用list初始化FALSE的第5列,请在嵌套循环之前执行以下操作:

list$V5 = FALSE

代码:

list$V5=TRUE
for (i in 1:nrow(list)) {
  for (j in 1:nrow(knownlocation)) {
    if ( (list[i, 2] == knownlocation[j, 2]) && (list[i, 3] >= knownlocation[j, 3]) && (list[i, 4] <= knownlocation[j, 4]) ) {
      list[i, 5] = "TRUE" }
}