在R中执行for循环时,数组中的值无效

时间:2014-07-10 08:16:18

标签: r for-loop while-loop

我是R的新手并且坚持一个非常幼稚的事情。我正在' NA'执行以下代码后count数组中的值:

i=1
j=2
l=1
count=0
while(j<length(positions)){
  a=positions[i]
  b=positions[j]
  for(k in a:b){
    if(y$feature[k]==x$feature[l]){
      count[l]=count[l]+1
    }
  }
  i=i+2
  j=j+2
  l=l+1
}

作为参考,y和x数据帧如下:

数据框

 positions   id  feature     

      1       1    45128
      2       1    28901
      3       1    48902
      .       .
      .       .
      .       .
      .       .
     2344     1    45579
     2345     2    37689
     2346     2    45547
     .        .
     .        .
     5677     2    12339
     5678     3    98034
     5679
     .
     .

x dataframe

id     feature

 1      28901
 2      23498
 3      98906
 .        .
 .        .
 .        .

我已经在位置数组中插入了位置,即新ID开始的位置和结束位置

位置是由[1,2344,2345,5677,5678,7390,7391,...]组成的数组。我正在将for循环增加为位置数组中的元素,我是1,3,5 ... j是2,4,6 ...如果y $ feature和x $ feature匹配,我增加count [l]

因此,将x的第一个特征与y中id = 1的所有特征进行比较,将x中的第二个特征与y中id = 2的所有特征进行比较,依此类推。当它们匹配时,count [l]递增。 i和j递增两次,使它们以正确的位置开始。 *但我得到一个有效的答案[1],其余所有值都是NA。

请说明发生这种情况的原因以及使用循环执行此操作的有效方法。

1 个答案:

答案 0 :(得分:1)

这是因为您尝试将不存在的值count[l]添加到1。您从count<-0开始,因此count的长度为1。没有count[2],因此对count[2]的引用会返回NA。然后(假设您的循环中为l = 2),NA + l返回NA

如果您初始化count<-rep(0,length(positions)),这个特定问题就会消失。

与此同时,您可以将操作矢量化很多。我相信你可以用

替换k循环
 count[l] <-  sum(y$feature[a:b]==x$feature[l])

举个例子。