[R] Extract data from Array to Table
Karim Mezhoud
kmezhoud at gmail.com
Wed Feb 11 17:11:06 CET 2015
Dear All,
I am facing the task to extract data from array to table. here an example
of array.
##Get A list of Matrices with unequal rows
Disease <- NULL
Diseases <- NULL
ListMatByGene <- NULL
for(i in 1:3){
Disease[[i]] <-matrix(sample(-30:30,25+(5*
i)),5+i)
rownames(Disease[[i]]) <- paste0("Sample",1:(5+i))
colnames(Disease[[i]]) <- paste0("Gene",1:5)
D <- paste0("Disease",i)
Diseases[[D]] <- Disease[[i]]
}
## get the same Column from all matrices
getColumn <- function(x, colNum, len = nrow(x)){
y <- x[,colNum]
length(y) <- len
y
}
## get Matrices by the same columns of the list of matrices
getMatrices <- function(colNums, dataList = x){
# the number of rows required
n <- max(sapply(dataList, nrow))
lapply(colNums, function(x, dat, n) { # iterate along requested columns
do.call(cbind, lapply(dat, getColumn,x, len=n)) # iterate along
input data list
}, dataList, n)
}
## Rotate the list of matrices by 90°
G <- paste0("Gene",1:5)
ListMatByGene[G] <- getMatrices(c(1:ncol(Diseases[[1]])),dataList=Diseases)
## get Disease correlation by gene
DiseaseCorrelation <- lapply(ListMatByGene,function(x) cor(x,use="na",
method="spearman"))
##convert the list of Matrices to array
ArrayDiseaseCor <- array(unlist(DiseaseCorrelation), dim =
c(nrow(DiseaseCorrelation[[1]]), ncol(DiseaseCorrelation[[1]]),
length(DiseaseCorrelation)))
dimnames(ArrayDiseaseCor) <- list(names(Diseases), names(Diseases),
colnames(Diseases[[1]]))
## Select only correlation bigger than 0.5 from the array
FilterDiseaseCor <- apply(ArrayDiseaseCor,MARGIN=c(1,2) ,function(x)
x[abs(x)>0.5])
## Final result
FilterDiseaseCor
Disease1 Disease2 Disease3
Disease1 Numeric,5 Numeric,2 -0.9428571
Disease2 Numeric,2 Numeric,5 Numeric,2
Disease3 -0.9428571 Numeric,2 Numeric,5
Question is:
How can get a table as:
D1 D2 Cor Gene
Disease1 Disease2 -0.94 Gene2
Disease1 Disease2 0.78 Gene4
Disease3 Disease2 0.5 Gene5
...
and
Disease1 Disease2 Disease3
Disease1 5 1 0
Disease2 1 5 3
Disease3 0 3 5
Or in general, How can I extract data from Array to Table?
Thanks
Karim
[[alternative HTML version deleted]]
More information about the R-help
mailing list