jpm miao
2013-May-23 15:30 UTC
[R] Could graph objects be stored in a "two-dimensional list"?
Hi, I have a few graph objects created by some graphic package (say, ggplot2, which I use frequently). Because of the existent relation between the graphs, I'd like to index them in two dimensions as p[1,1], p[1,2], p[2,1], p[2,2] for convenience. To my knowledge, the only data type capable of storing graph objects (and any R object) is list, but unfortunately it is available in only one dimension. Could the graphs be stored in any two-dimensional data type? One remedy that comes to my mind is to build a function f so that f(1,1)=1 f(1,2)=2 f(2,1)=3 f(2,2)=4 With functions f and f^{-1} (inverse function of f) , the two-dimensional indices could be mapped to and from a set of one-dimensional indices, and the functions are exactly the way R numbers elements in a matrix. Does R have this built-in function for a m by n matrix or more generally, m*n*p array? (I know this function is easy to write, but just want to make sure whether it exists already) Thanks, Miao [[alternative HTML version deleted]]
Jeff Newmiller
2013-May-23 16:06 UTC
[R] Could graph objects be stored in a "two-dimensional list"?
You could use lists of lists, and index them with vectors. a <- list() a[[1]] <- list() a[[2]] <- list() a[[c(1,1)]] <- g11 a[[c(1,2)]] <- g12 a[[c(2,1)]] <- g21 a[[c(2,2)]] <- g22 print(a[[c(2,1)]]) but this seems like an inefficient use of memory because your indexed data is stored more compactly than the graph object is. I would index the data and generate the graph object on the fly when I wanted to see it. --------------------------------------------------------------------------- Jeff Newmiller The ..... ..... Go Live... DCN:<jdnewmil at dcn.davis.ca.us> Basics: ##.#. ##.#. Live Go... Live: OO#.. Dead: OO#.. Playing Research Engineer (Solar/Batteries O.O#. #.O#. with /Software/Embedded Controllers) .OO#. .OO#. rocks...1k --------------------------------------------------------------------------- Sent from my phone. Please excuse my brevity. jpm miao <miaojpm at gmail.com> wrote:>Hi, > >I have a few graph objects created by some graphic package (say, >ggplot2, >which I use frequently). Because of the existent relation between the >graphs, I'd like to index them in two dimensions as p[1,1], p[1,2], >p[2,1], >p[2,2] for convenience. > >To my knowledge, the only data type capable of storing graph objects >(and >any R object) is list, but unfortunately it is available in only one >dimension. Could the graphs be stored in any two-dimensional data type? > > One remedy that comes to my mind is to build a function f so that >f(1,1)=1 >f(1,2)=2 >f(2,1)=3 >f(2,2)=4 >With functions f and f^{-1} (inverse function of f) , the >two-dimensional >indices could be mapped to and from a set of one-dimensional indices, >and >the functions are exactly the way R numbers elements in a matrix. Does >R >have this built-in function for a m by n matrix or more generally, >m*n*p >array? (I know this function is easy to write, but just want to make >sure >whether it exists already) > > Thanks, > >Miao > > [[alternative HTML version deleted]] > >______________________________________________ >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.
David Winsemius
2013-May-23 20:39 UTC
[R] Could graph objects be stored in a "two-dimensional list"?
On May 23, 2013, at 8:30 AM, jpm miao wrote:> Hi, > > I have a few graph objects created by some graphic package (say, ggplot2, > which I use frequently). Because of the existent relation between the > graphs, I'd like to index them in two dimensions as p[1,1], p[1,2], p[2,1], > p[2,2] for convenience. > > To my knowledge, the only data type capable of storing graph objects(This will all be depending on what you do mean by "graph objects".)> (and > any R object) is list, but unfortunately it is available in only one > dimension.I think both of these presumptions are incorrect.> Could the graphs be stored in any two-dimensional data type? > > One remedy that comes to my mind is to build a function f so that > f(1,1)=1 > f(1,2)=2 > f(2,1)=3 > f(2,2)=4 > With functions f and f^{-1} (inverse function of f) , the two-dimensional > indices could be mapped to and from a set of one-dimensional indices, and > the functions are exactly the way R numbers elements in a matrix. Does R > have this built-in function for a m by n matrix or more generally, m*n*p > array? (I know this function is easy to write, but just want to make sure > whether it exists already) >Matrices can hold list elements:> matrix( list(a="a"), 2,2)[,1] [,2] [1,] "a" "a" [2,] "a" "a"> matrix( list(a="a"), 2,2)[1,1][[1]] [1] "a" And list may be nested in a regular "matrix"> list( list( list(a="a"), list(b="bb") ),list(list(c="ccc"), list(d="dddd") ) )[[1]][[2]] $b [1] "bb" So storing in this manner for access by an appropriately designed function should also be straight-forward. You could argue that the lattice-object panel structure depends on this fact.> > [[alternative HTML version deleted]]Please learn to post in plain text. David Winsemius Alameda, CA, USA