[BioC] How to create nested data frames

Ana Conesa aconesa at ochoa.fib.es
Fri Oct 26 01:01:59 CEST 2007


Dear Oleg

Thanks for your help, I have tried, but it seems that method
indicated works when the 2 matrices have the same length, which it is
not my case. I cannot contruct the data.frame as you indicated if I
have different lengths for a and b...

Ana
>
>
>---- Mensaje Original ----
>De: osklyar at ebi.ac.uk
>Para: aconesa at ochoa.fib.es
>Asunto: Re: [BioC] How to create nested data frames
>Fecha: Thu, 25 Oct 2007 23:42:51 +0100
>
>>AFAIK it should be impossible, at least directly: a data.frame is
>>essentially a list of vectors of equal length. However, a matrix in
>R is
>>essentially a vector with dim attributes set. So what you can do is
>>something like this:
>>
>># function that uses such a crazy data.frame, x
>>f = function(x) {
>>  a = x$a
>>  dim(a) = attr(x,"matrixdim")
>>  b = x$b
>>  dim(b) = dim(a)
>>  # use matrices, e.g.
>>  print(dim(b))
>>}
>>
>>m1 = matrix(runif(10),2,5)
>>m2 = matrix(runif(10),2,5)
>>
>>df = data.frame(a=as.numeric(m1), b=as.numeric(m2))
>>attr(df, "matrixdim") = dim(m1)
>>
>>f(df)
>>
>>### should print 2 5 as those are the dimensions of matrices!
>>> f(df)
>>[1] 2 5
>>
>>indeed!
>>
>>Well, you need to consider that when you do as.numeric and when you
>do
>>'dim' on a vector - you copy the data! But honestly you can always
>find
>>a way to pass another object and a list would be more reasonable as
>you
>>do not need to copy data. And although the above example works I
>cannot
>>think of a situation where it would be justified to use it, also
>>data.frames are Slow!
>>
>>
>>-  
>>Dr Oleg Sklyar * EMBL-EBI, Cambridge CB10 1SD, UK * +441223494466
>>
>>
>>On Fri, 2007-10-26 at 00:19 +0200, Ana Conesa wrote:
>>> Dear List,
>>> 
>>> This is more an R than a Bioconductor question but I cannot post
>at
>>> the R list at the moment, so I apologize for using Bioconductor
>>> instead.
>>> 
>>> I am trying to use the pls package to compute pls regression of
>gene
>>> expression data on medical variables. I should provide my data as
>a
>>> data.frame (NOT A LIST) which contains the matrices of X and Y
>>> variables, i.e. if mydata is such data frame then mydata$expr
>gives
>>> the expression matrix and mydata$medical is the matrix of medical
>>> data. 
>>> If I do:
>>> >mydata <- data.frame(expr=expr, medical=medical)
>>> 
>>> I simply obtain a single data.frame combining the two and I am not
>>> able to call the matrices independently  I have been seaching the
>R
>>> help and documentation without sucess. 
>>> Any help appreciated.
>>> 
>>> Ana
>>> 
>>> _______________________________________________
>>> Bioconductor mailing list
>>> Bioconductor at stat.math.ethz.ch
>>> https://stat.ethz.ch/mailman/listinfo/bioconductor
>>> Search the archives:
>http://news.gmane.org/gmane.science.biology.informatics.conductor
>>
>>_______________________________________________
>>Bioconductor mailing list
>>Bioconductor at stat.math.ethz.ch
>>https://stat.ethz.ch/mailman/listinfo/bioconductor
>>Search the archives: http://news.gmane.org/gmane.science.biology.inf
>ormatics.conductor
>>



More information about the Bioconductor mailing list