0

1000 ウィンドウ内に収まるエントリをカウントしようとしています。問題は、実行する必要がある操作の数が非常に多くなる for ループを使用していることです (私は R にかなり慣れていません)。境界エラー。これを行うにはもっと良い方法があるはずです。

ファイル (ファイルは 100 MB を少し超えていることに注意してください): bamDF.txt

使用する:

dget(file="bamDF.txt")

脚本:

attach(bamDF)
out <- matrix(0,1,ceiling((max(pos, na.rm=TRUE)-min(pos, na.rm=TRUE))/interval))
interval <- 1000
for(q in 1:nrow(bamDF)){
  for(z in 1:ceiling((max(pos, na.rm=TRUE)-min(pos, na.rm=TRUE))/interval)){
    if(min(pos, na.rm=TRUE)+interval*(z-1)<pos[q]&&pos[q]<(min(pos, na.rm=TRUE)+interval*(z))){
      out[z,] <- out[z,]+1;


    }

  }


}
detach(bamDF)
4

2 に答える 2

1

cut機能を使用できます

# set the seed to get a reproducible example
set.seed(12345)

min.val <- 0
max.val <- 5000
num.val <- 10000
# Generate some random values
values <- sample(min.val:max.val, num.val, replace=T)

interval <- 1000
num.split <- ceiling((max.val - min.val)/interval)+1

# Use cut to split the data. 
# You can set labels=FALSE if you want the group number 
# rather than the interval
groups <- cut(values, seq(min.val, max.val, length.out=num.split))

# Count the elements in each group
res <- table(groups)

res含まれます:

groups
    (0,1e+03] (1e+03,2e+03] (2e+03,3e+03] (3e+03,4e+03] (4e+03,5e+03] 
         1987          1974          2054          2000          1984 

hist同様に、次の関数を使用できます。

 h <- hist(values, 10) # 10 bins

また

 h <- hist(values, seq(min.val, max.val, length.out=num.split))

h$countsカウントが含まれています。plot=NULL結果をプロットしたくない場合に使用します。

于 2013-06-14T15:01:12.587 に答える
0
grps <- seq(min(pos), max(pos), by= 1000)
counts <- table( findInterval( pos, c(grps, Inf) ) )
names(counts) <- grps
于 2013-06-14T16:04:22.800 に答える