替代嵌套循环

时间:2016-04-20 07:57:15

标签: nested subset

我对R脚本很新,我找不到任何类似的话题。我需要将我的' dat'保持与chr匹配的所有行和范围中的范围(起始端)'宾语。 我写了一个for循环,但我认为它不是R中最聪明的解决方案,此外它对于大数据集来说非常慢。 有更快的替代方案吗? 提前感谢您的回复。

regions <- cbind(chr = floor(runif(163,1,10))
             , start = floor(runif(163,100,200))
             , end = floor(runif(163,200,500)))
dat <- cbind(chr = floor(runif(20e6,1,22))
         , pos = floor(runif(20e6, 1,10000)))

matched_index <- c()
for(i in 1:nrow(dat)) {
  for(j in 1:nrow(regions)) {
    if(dat[i,1] == regions[j,1]  
       & dat[i,2] >= regions[j,2] 
         & dat[i,2] <= regions[j,3])
     {
      matched_index <- c(matched_index, i) 
      print(i)
      break
    }
  }
}
dat.filtered <- dat[matched_index,]

0 个答案:

没有答案