Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

using graph.adjacency() in R

I have a sample code in R as follows:

library(igraph)
rm(list=ls())
dat=read.csv(file.choose(),header=TRUE,row.names=1,check.names=T) # read .csv file
m=as.matrix(dat)
net=graph.adjacency(adjmatrix=m,mode="undirected",weighted=TRUE,diag=FALSE)

where I used csv file as input which contain following data:

    23732   23778   23824   23871   58009   58098   58256
23732   0   8   0   1   0   10  0
23778   8   0   1   15  0   1   0
23824   0   1   0   0   0   0   0
23871   1   15  0   0   1   5   0
58009   0   0   0   1   0   7   0
58098   10  1   0   5   7   0   1
58256   0   0   0   0   0   1   0

After this I used following command to check weight values:

E(net)$weight

Expected output is somewhat like this:

> E(net)$weight
 [1]  8  1 10  1 15  1  1  5  7  1

But I'm getting weird values (and every time different):

> E(net)$weight
 [1] 2.121996e-314 2.121996e-313 1.697597e-313  1.291034e-57 1.273197e-312 5.092790e-313 2.121996e-314 2.121996e-314 6.320627e-316 2.121996e-314 1.273197e-312 2.121996e-313
[13] 8.026755e-316  9.734900e-72 1.273197e-312 8.027076e-316 6.320491e-316 8.190221e-316 5.092790e-313  1.968065e-62 6.358638e-316

I'm unable to find where and what I am doing wrong? Please help me to get the correct expected result and also please tell me why is this weird output and that too every time different when I run it.??

Thanks, Nitin

like image 208
N D Thokare Avatar asked Jan 15 '13 06:01

N D Thokare


2 Answers

Just a small working example below, much clearer than CSV input.

library('igraph');
adjm1<-matrix(sample(0:1,100,replace=TRUE,prob=c(0.9,01)),nc=10); 
g1<-graph.adjacency(adjm1); 
plot(g1)

enter image description here

P.s. ?graph.adjacency has a lot of good examples (remember to run library('igraph')).

Related threads

  1. Creating co-occurrence matrix
  2. Co-occurrence matrix using SAC?
like image 84
hhh Avatar answered Oct 04 '22 07:10

hhh


The problem seems to be due to the data-type of the matrix elements. graph.adjacency expects elements of type numeric. Not sure if its a bug.

After you do,

m <- as.matrix(dat)

set its mode to numeric by:

mode(m) <- "numeric"

And then do:

net <- graph.adjacency(m, mode = "undirected", weighted = TRUE, diag = FALSE)
> E(net)$weight
[1]  8  1 10  1 15  1  1  5  7  1
like image 28
Arun Avatar answered Oct 04 '22 06:10

Arun