我是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。
请说明发生这种情况的原因以及使用循环执行此操作的有效方法。
答案 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])
举个例子。