有没有一种方法可以增加R中for循环的输出数量?

时间:2019-12-09 05:50:27

标签: r for-loop if-statement rstudio

我插入了一个for循环:

for(j in 2:1036) {
  nMatchingLoci = 0
  for(i in 1:1) {
    if(sampGeno[1,i]==FGMMdata[1,i,j] && sampGeno[2,i]==FGMMdata[2,i,j]) {
      nMatchingLoci = nMatchingLoci + 1
    }
  }

  if(nMatchingLoci==1) {
    print(paste("!!! 1 locus match with entry number", j))
 }
  } 

我的输出只是配置文件列表。如何添加其中的几个?

该列表在我的控制台中如下所示:

[1] "!!! 1 locus match with entry number 4"

[1] "!!! 1 locus match with entry number 7"

[1] "!!! 1 locus match with entry number 24"

[1] "!!! 1 locus match with entry number 44"

[1] "!!! 1 locus match with entry number 51"

[1] "!!! 1 locus match with entry number 53"

[1] "!!! 1 locus match with entry number 58"

[1] "!!! 1 locus match with entry number 63"

[1] "!!! 1 locus match with entry number 72"

以此类推...

2 个答案:

答案 0 :(得分:0)

在for循环之前,创建一个值为0(x = 0)的变量。然后在第二个if语句中添加
 x = x + 1

然后在运行for循环后仅打印x的值。那是你的数目。

答案 1 :(得分:0)

我建议使用向量或列表来存储“位置匹配”的索引,然后在循环完成后即可对条目进行计数。

我个人会使用一个列表,因为它的用途更广泛(但使用起来有些挑剔)

## Preallocate list
matchList <- vector("list",1036)

for(j in 2:1036) {
  for(i in 1:1) {
    if(sampGeno[1,i]==FGMMdata[1,i,j] && sampGeno[2,i]==FGMMdata[2,i,j]) {
      matchList[[j]] <- c(matchList[[j]],i)
    }
  }
} 

## indexes i where match was found for j=73
matchList[[73]]

## Number of matches for each j index
lengths(matchList)

## Total number of matches
sum(lengths(matchList))

正如我在评论中说的那样,我正在假设i上的for循环位于1:1以外的序列上。