-2

我正在尝试使用两个参数拆分我的数据集,即缺失值的分数和“maf”,并将子数据集存储在列表中。这是我所做的(它不起作用)。任何帮助将不胜感激,

谢谢。

 library(BLR)
 library(missForest)
 data(wheat)

 X2<- prodNA(X, 0.4) ### creating missing values
 dim(X2)

 fd<-t(X2)  

 MAF<-function(geno){        ## markers are in the rows
 geno[(geno!=0) & (geno!=1) & (geno!=-1)] <- NA
 geno <- as.matrix(geno)
 ## calc_Freq for alleles
 n0 <- apply(geno==0,1,sum,na.rm=T)
 n1 <- apply(geno==1,1,sum,na.rm=T)
 n2 <- apply(geno==-1,1,sum,na.rm=T)
 n <- n0 + n1 + n2
 ## calculate allele frequencies
 p <- ((2*n0)+n1)/(2*n)
 q <- 1 - p
 maf  <- pmin(p, q)
 maf}

 frac.missing <- apply(fd,1,function(z){length(which(is.na(z)))/length(z)})

 maf<-MAF(fd)

 lst<-matrix()
 for (i in seq(0.2,0.7,by =0.2)){
 for (j in seq(0,0.2,by =0.005)){
 lst=fd[(maf>j)|(frac.missing < i),]
 }}
4

2 回答 2

3

听起来您想要该split函数提供的结果。

如果您有一个向量,“frac.missing”和“maf”是根据“fd”中的值定义的(并且与 fd 中的行数具有相同的长度),那么这将提供您的拆分寻找:

  spl.fd <- split(fd, list(maf, frac.missing) )

如果您想根据您的 for 循环指定的带和在带内“分组”fd值,那么相同的-construct 可能会执行您当前代码未能完成的工作:maf(fd)frac.missingsplit

lst <- split( fd, list(cut(maf(fd), breaks = seq(0,0.2,by =0.005) , 
                                       include.lowest=TRUE), 
                       cut(frac.missing, breaks = seq(0.2,0.7,by =0.2),
                             right=TRUE,include.lowest=TRUE)
                        )
              )

正确的参数满足了基于“<”运算符进行拆分的愿望,而默认操作cut假定“>”与“breaks”进行比较。提供类似功能的另一个功能是by.

于 2013-06-30T01:21:48.267 回答
0

下面的代码正是我所需要的:

Y<-t(GBS.binary)
nn<-colnames(Y)
fd<-Y
maf<-as.matrix(MAF(Y))
dff<-cbind(frac.missing,maf,Y)
colnames(dff)<-c("fm","maf",nn)
dff<-as.data.frame(dff)

for (i in seq(0.1,0.6,by=0.1)) { 
       for (j in seq(0,0.2,by=0.005)){  
              assign(paste("fm_",i,"maf_",j,sep=""),
                     (subset(dff, maf>j & fm <i))[,-c(1,2)])
                                }    }
于 2013-06-30T23:58:46.703 回答