Hi,
Try:
ME<- matrix(NA,dim(geno[1]),dim(geno)[2])
indx0<- geno==0 & !is.na(geno)
ME[indx0]<- Mx[indx0]+My[indx0]
?indx1<- geno==1 & !is.na(geno)
ME[indx1]<- apply(cbind(Mx[indx1],My[indx1]),1,max)
ME
A.K.
----- Original Message -----
From: JiangZhengyu <zhyjiang2006 at hotmail.com>
To: "r-help at r-project.org" <r-help at r-project.org>
Cc:
Sent: Tuesday, September 24, 2013 10:07 AM
Subject: [R] Help: calculations based on three matrices
Dear R experts,
I have 3 matrices - "Mx", "My" and "geno" that
have the same exact dimensions (attached).? I want to calculate a expression
matrix (ME) of the same dimension as well. It is a little complicated.
To calculate and for a specific cell in ME,? e.g. ME[2,2],
if value of geno[2,2] is 0, ME[2,2]=Mx[2,2]+My[2,2];
if value of geno[2,2] is 1, ME[2,2]=the larger number of Mx[2,2] and My[2,2]
if value of geno[2,2] is NA, ME[2,2]=NA
I tried to make codes below, but did not work and got stuck. I was wondering if
anyone could help with better coding.
Thanks in advance,
Zhengyu
-----------------------------------------------?
Mx <-? read.table("Mx.txt",header=TRUE, sep="\t",
na.strings="NA", dec=".", strip.white=TRUE)
My <-? read.table("My.txt",header=TRUE, sep="\t",
na.strings="NA", dec=".", strip.white=TRUE)
geno <-? read.table("geno.txt",header=TRUE, sep="\t",
na.strings="NA", dec=".", strip.white=TRUE)
#Calculate Exp for geno==0
ind=which(geno==0,arr.ind=T)
het=Mx+My
ME=matrix(het,nrow=nrow(geno),ncol=ncol(geno))
ME[ind]=het[ind]
#Calculate Exp for geno==1
ind=which(geno==1,arr.ind=T)
hom=apply(M1,c(1:2),function(x)max(M1[],M2[]))# error
ME=matrix(hom,nrow=nrow(geno),ncol=ncol(geno))
ME[ind]=hom[ind]
# I think the first calculation (geno==0) will be replaced but I don't know
how to keep them.
> head(Mx)
? X1cX X2cX? X3cX? X4cX X5cX X6cX X7cX X8cX
1 26383 6252 14319 16421 2225? 480 2038 1164
2? 636? 310? 351? 341? 218? 656? 412? 267
3? 301? 299? 752? 236? 239? 309? 283? 195
4? 1016 1046? 1364? 782? 822? 274? 437? 346
5? 1261 1272? 1076? 1037? 659? 337 1143 1195
6? 609? 414? 393? 459? 215? 429? 566? 236
> dim(Mx)
[1] 20? 8
> head(My)
? X1cY X2cY X3cY X4cY X5cY X6cY X7cY X8cY
1? 1039? 233? 408? 607? 275 1837 1319? 149
2? 7146 1706 2248 2346 1596? 544 2696? 417
3? 266? 425 1186? 214? 325? 369? 377? 215
4? 260? 282? 238? 240? 264? 265? 317? 203
5? 1070 1052? 746? 613? 384? 447? 456? 683
6 13032 1708 2328 5998 2529? 923 1068? 145
> dim(My)
[1] 20? 8
> head(geno)
? P1 P2 P3 P4 P5 P6 P7 P8
1 NA NA NA NA? 1 NA NA NA
2? 1? 1? 1? 1? 1? 1? 1? 1
3? 1? 1? 0? 0? 0? 0? 1? 0
4? 1? 1? 1? 1? 1? 1? 0? 0
5? 0? 0? 0? 0? 0? 0? 1? 0
6 NA NA NA NA NA NA NA NA
> dim(geno)
[1] 20? 8
??? ??? ??? ? ??? ??? ? ??? ??? ??? ? ??? ??? ?
______________________________________________
R-help at r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.