[R] Help: calculations based on three matrices
arun
smartpink111 at yahoo.com
Tue Sep 24 16:51:38 CEST 2013
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.
More information about the R-help
mailing list