[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