Re: [R] combining data structures

2012-02-04 Thread David Stevens
Thanks for the reply. Two things - I must have something missing because 
copying and pasting your example gave me an error

... your definitions of nn

  Output = do.call(as.data.frame(rbind),nn)

Error in as.data.frame.default(rbind) :
   cannot coerce class 'function' into a data.frame

The second is the need, and why I'm not sure this is the best way. This 
is to customize the flow charting library code from the library 
'diagram' to use a node-and-link characterization of a network - think 
PERT charts or perhaps linking river segments in a water quality model. 
Each Node will be a, say, circle and has attributes of being connected 
up to one or more upstream nodes and down to one or more downstream 
nodes. So the Connect.up column is a vector up upstream connections, 
usually one but sometimes  one, and likewise Connect.down. There is an 
accompanying table of links with attributes of which nodes are at each 
end of a link and other metadata that describe the link (e.g. the length 
of time required to traverse the link, its name etc. That said, my 
thought was that the situation was too simple to fire up a full-blown 
object system beyond what R provides natively. I guess it's like making 
a data frame that has some 3-d elements.



On 2/3/2012 9:32 PM, Pete Brecknock wrote:
 nn=list()

 nn[[1]] =  list(Node = 1, Connect.up = c(NULL), Connect.down = c(2,3))
 nn[[2]] =  list(Node = 2, Connect.up = c(1), Connect.down = c(4,5))
 nn[[3]] =  list(Node = 3, Connect.up = c(NULL), Connect.down = c(2,3))
 nn[[4]] =  list(Node = 4, Connect.up = c(1), Connect.down = c(4,5))

 Output = do.call(as.data.frame(rbind),nn)

-- 
David K Stevens, P.E., Ph.D., Professor
Civil and Environmental Engineering
Utah Water Research Laboratory
8200 Old Main Hill
Logan, UT  84322-8200
435 797 3229 - voice
435 797 1363 - fax
david.stev...@usu.edu




[[alternative HTML version deleted]]

__
R-help@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.


Re: [R] combining data structures

2012-02-04 Thread Pete Brecknock
David

1. The last line of the code should have been ...

Output = as.data.frame(do.call(rbind,nn))

# Output
  Node Connect.up Connect.down
11   NULL 2, 3
22  1 4, 5
33   NULL 2, 3
44  1 4, 5

Apologies for any confusion

2.  I am not familiar with the diagram package or the examples you describe.

Why the desire to create a data frame? Why not just use a list?

HTH

Pete


dkStevens wrote
 
 Thanks for the reply. Two things - I must have something missing because 
 copying and pasting your example gave me an error
 
 ... your definitions of nn
 
   Output = do.call(as.data.frame(rbind),nn)
 
 Error in as.data.frame.default(rbind) :
cannot coerce class 'function' into a data.frame
 
 The second is the need, and why I'm not sure this is the best way. This 
 is to customize the flow charting library code from the library 
 'diagram' to use a node-and-link characterization of a network - think 
 PERT charts or perhaps linking river segments in a water quality model. 
 Each Node will be a, say, circle and has attributes of being connected 
 up to one or more upstream nodes and down to one or more downstream 
 nodes. So the Connect.up column is a vector up upstream connections, 
 usually one but sometimes  one, and likewise Connect.down. There is an 
 accompanying table of links with attributes of which nodes are at each 
 end of a link and other metadata that describe the link (e.g. the length 
 of time required to traverse the link, its name etc. That said, my 
 thought was that the situation was too simple to fire up a full-blown 
 object system beyond what R provides natively. I guess it's like making 
 a data frame that has some 3-d elements.
 
 
 
 On 2/3/2012 9:32 PM, Pete Brecknock wrote:
 nn=list()

 nn[[1]] =  list(Node = 1, Connect.up = c(NULL), Connect.down = c(2,3))
 nn[[2]] =  list(Node = 2, Connect.up = c(1), Connect.down = c(4,5))
 nn[[3]] =  list(Node = 3, Connect.up = c(NULL), Connect.down = c(2,3))
 nn[[4]] =  list(Node = 4, Connect.up = c(1), Connect.down = c(4,5))

 Output = do.call(as.data.frame(rbind),nn)
 
 -- 
 David K Stevens, P.E., Ph.D., Professor
 Civil and Environmental Engineering
 Utah Water Research Laboratory
 8200 Old Main Hill
 Logan, UT  84322-8200
 435 797 3229 - voice
 435 797 1363 - fax
 david.stevens@
 
 
 
 
   [[alternative HTML version deleted]]
 
 __
 R-help@ 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.
 


--
View this message in context: 
http://r.789695.n4.nabble.com/combining-data-structures-tp4356288p4358435.html
Sent from the R help mailing list archive at Nabble.com.

__
R-help@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.


[R] combining data structures

2012-02-03 Thread David Stevens
Group

It's unlikely I'm trying this the best way, but I'm trying to create a 
data structure from elements like

nNode = 2
nn = vector(list,nNode)

nn[[1]] =  list(Node = 1, Connect.up = c(NULL), Connect.down = c(2,3))
nn[[2]] =  list(Node = 2, Connect.up = c(1), Connect.down = c(4,5))
  #( and eventually many more nodes)

NodeList = as.data.frame(nn[[1]])
for(i in 2:nNode) {
   NodeList = rbind(NodeList,as.data.frame(nn[[i]]))
}

and is trying to create a data frame with many rows and three columns: 
Node, Connect.up,Connect.down
in which the Connect.up and Connect.down columns may be single numbers 
or vectors of numbers.  The above approach gives an error:

Error in data.frame(Node = 1, Connect.up = NULL, Connect.down = c(2,  :
   arguments imply differing number of rows: 1, 0, 2

My earlier try by brute force worked fine:

NodeList = as.data.frame(rbind(nn[[1]],nn[[2]]))

  NodeList
   Node Connect.up Connect.down
11   NULL 2, 3
22  1 4, 5

and gives me what I want (many more rows eventually). But I want to do 
this generically from the problem context in a procedure so I won't know 
up front how many nodes I'll have.

Clearly I'm not understanding how referencing works for lists like I've 
created.  Can anyone shed light on this?

-- 
David K Stevens, P.E., Ph.D., Professor
Civil and Environmental Engineering
Utah Water Research Laboratory
8200 Old Main Hill
Logan, UT  84322-8200
435 797 3229 - voice
435 797 1363 - fax
david.stev...@usu.edu




[[alternative HTML version deleted]]

__
R-help@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.


Re: [R] combining data structures

2012-02-03 Thread Pete Brecknock
Not entirely sure why you would want a data.frame that has multiple entries
in one of the columns (Connect.down) but leaving that aside is the following
of any use?

nn=list()

nn[[1]] =  list(Node = 1, Connect.up = c(NULL), Connect.down = c(2,3))
nn[[2]] =  list(Node = 2, Connect.up = c(1), Connect.down = c(4,5))
nn[[3]] =  list(Node = 3, Connect.up = c(NULL), Connect.down = c(2,3))
nn[[4]] =  list(Node = 4, Connect.up = c(1), Connect.down = c(4,5))

Output = do.call(as.data.frame(rbind),nn)

# Output
  value.Node value.Connect.up value.Connect.down
1  1 NULL   2, 3
2  21   4, 5
3  3 NULL   2, 3
4  41   4, 5

HTH

Pete



dkStevens wrote
 
 Group
 
 It's unlikely I'm trying this the best way, but I'm trying to create a 
 data structure from elements like
 
 nNode = 2
 nn = vector(list,nNode)
 
 nn[[1]] =  list(Node = 1, Connect.up = c(NULL), Connect.down = c(2,3))
 nn[[2]] =  list(Node = 2, Connect.up = c(1), Connect.down = c(4,5))
   #( and eventually many more nodes)
 
 NodeList = as.data.frame(nn[[1]])
 for(i in 2:nNode) {
NodeList = rbind(NodeList,as.data.frame(nn[[i]]))
 }
 
 and is trying to create a data frame with many rows and three columns: 
 Node, Connect.up,Connect.down
 in which the Connect.up and Connect.down columns may be single numbers 
 or vectors of numbers.  The above approach gives an error:
 
 Error in data.frame(Node = 1, Connect.up = NULL, Connect.down = c(2,  :
arguments imply differing number of rows: 1, 0, 2
 
 My earlier try by brute force worked fine:
 
 NodeList = as.data.frame(rbind(nn[[1]],nn[[2]]))
 
   NodeList
Node Connect.up Connect.down
 11   NULL 2, 3
 22  1 4, 5
 
 and gives me what I want (many more rows eventually). But I want to do 
 this generically from the problem context in a procedure so I won't know 
 up front how many nodes I'll have.
 
 Clearly I'm not understanding how referencing works for lists like I've 
 created.  Can anyone shed light on this?
 
 -- 
 David K Stevens, P.E., Ph.D., Professor
 Civil and Environmental Engineering
 Utah Water Research Laboratory
 8200 Old Main Hill
 Logan, UT  84322-8200
 435 797 3229 - voice
 435 797 1363 - fax
 david.stevens@
 
 
 
 
   [[alternative HTML version deleted]]
 
 __
 R-help@ 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.
 


--
View this message in context: 
http://r.789695.n4.nabble.com/combining-data-structures-tp4356288p4356547.html
Sent from the R help mailing list archive at Nabble.com.

__
R-help@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.