2016-09-29 59 views
0

我試圖獲得在兩個給定點之間共享某些DNA序列的個人比例。我想使用特定的滑動窗口。爲了展示這個問題,我創建了這個例子。首先,我創建一個包含四列的數據框。數據框中的滑動窗口r

x<-c(rep("sc256",times=2000),rep("sc784",times=2000)) 
pos1<-round(runif(2000,100,5000),digits=0) 
pos2<-round(runif(2000,100,5000),digits=0) 
y3<-rep(c(2,1),times=2000) 
M1<-data.frame(x,pos1,pos2,y3) 
colnames(M1)=c("iid","pos1","pos2","chr") 

我還創建了一個函數來獲得在特定間隔中有序列的個體比例。

roh_island<-function(pop,chr,p1,p2){ 
a<-pop[pop$chr==chr,] 
island<-subset(a,pos1>=p1 & pos2<=p2) 
n<-nrow(island)/length(M1$iid) 
return(n) 
} 

roh_island(M1,1,345,700) 

現在我想此間隔變換成值0和7000於是該窗口將採取的位置[0,10)之間移動時,大小爲10的滑動窗(10,20),...,( 6990,7000]我還需要使用幻燈片窗口的新功能存儲所有窗口和個人在數據框中的比例,然後再繪製它我嘗試一些我發現的關於我看到的滑動窗口的解決方案,但我不能讓他們的工作由於

回答

1

此代碼將從0 P1控制在10步滑動到6990,而P2幻燈片從10到7000的10個步驟:

output = apply(data.frame(seq(0,6990,10), seq(10,7000,10)), MARGIN=1, 
      function(x,y,z,a) roh_island(M1, 1, x[1], x[2])) 
plot(output, col="blue") 
grid(5, 5) 

enter image description here

+0

太棒了!謝謝!然而,當我將其應用於具有247249719個實體和1000個窗口的實際數據時,我主要得到NA(我得到0的第一個1000000)......我想我需要改變策略...... – Cebs