igraph-help
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [igraph] Re: working with weighted networks (from pajek .net)


From: Martin Tomko
Subject: Re: [igraph] Re: working with weighted networks (from pajek .net)
Date: Thu, 02 Sep 2010 12:28:20 +0200
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.1.8) Gecko/20100227 Lightning/1.0b1 Thunderbird/3.0.3

Hi Gabor,
yes, thanks, my mistake in terminology.
So my solution was actually right, only the sp object was not a vector but a list
(the differences in R still evade me a bit)

anyway, this did the trick:

e<-E(g,path=sp[[1]])
pathlength<-sum(e$weight)

Thanks for your help, I did nto assume this to be such a complicated task...

Cheers
Martin

On 9/2/2010 12:20 PM, Gábor Csárdi wrote:
On Thu, Sep 2, 2010 at 12:17 PM, Martin Tomko<address@hidden>  wrote:
Hi Gabor,
thanks for the answer. I have in the meantime focused on the first sollution
you proposed (but am afraid that that will nto scale well for my problem,
with EXTREMELY large graphs... )
For those you cannot calculate all shortest paths anyway.

anyway, the secoond solution look appealing, but I cannot get it to work.

I did this:
sp<-get.shortest.paths(g,nodes[1],nodes[2])
E(g,path=sp)
Error in E(g, path = sp) :
  (list) object cannot be coerced to type 'double'

That does not make sense, why would path expect a "double", the docs point
to a path object.
There is no such thing as a path object. The 'path' argument of 'E'
should be a numeric vector. You need to call 'E' for each path
separately, and then add the weights of the selected edges.

Gabor

Cheers
Martin

but that fails: Error in E(sp1) : Not a graph object (as expected)
How should I sue the function?

On 9/2/2010 11:57 AM, Gábor Csárdi wrote:
You're right, I forgot that you have weighted graphs. One solution is
to run 'shortest.paths()' as well, and that gives you the lengths.

Or you can use the E() function for each path, with the 'path'
argument, but this does not work properly if you have multiple edges.

Gabor

On Thu, Sep 2, 2010 at 11:40 AM, Martin Tomko<address@hidden>
  wrote:

Hi Gabor,
I am afraid that this solutions is not right:

sapply(get.shortest.paths(g, 5), length)-1

so let's assume we have the follwong network:
vertices
1
2
3
4
Edges:
1 - 2 0.5
2 - 3 0.2
3 - 4 0.1

And a resulting shortest path between 1 and 4 as c(1,2,3,4), your
solution
  would yield 3 as the length - which is fine for an unweighted graph.
But I need to get the value 0.5+0.2+0.1 = 0.8.

Is this possible?

Thanks,
Martin



this is only true in an unweighted network. In a weighted network, where
let's assume we have

On 9/2/2010 11:32 AM, Gábor Csárdi wrote:

On Thu, Sep 2, 2010 at 11:25 AM, Martin Tomko<address@hidden>
  wrote:


Thank you Gabor,
that helps heaps.
One last question - I guess the answer must be trivial. Once I get a
path
(get.shortest.paths(...)) between two vertices in a weighted graph, I
would
like to know the length of this path (similar to a vlaue I would get if
I
counted them all using shortes.paths(..., algorithm="dijkstra")). I
only
get
a list of visited vertices, as documented.

Is there a way to get this value?


It is the length of the path vector minus one:

sapply(get.shortest.paths(g, 5), length)-1



And is there a way to dientify edges based on input vertices? I read
through
the documentation and can not find the answer.


What is an input vertex? Adjacent vertex?

E(g)[ adj(v) ]

gives the edges adjacent to vertex v. 'from' and 'to' are similar to
'adj', but consider edge direction as well. There are more examples in
the manual page of 'E' and also here:
http://igraph.sourceforge.net/igraphbook/igraphbook-iterators.html

Gabor



Thanks
Martin

On 9/2/2010 11:11 AM, Gábor Csárdi wrote:


On Thu, Sep 2, 2010 at 11:07 AM, Martin Tomko<address@hidden>
  wrote:



Thank you guys, that solved my problem.
I suspected that $weight should work, but simple listing of an edge
did
not
reveal the attribute. Need to find out how to get the full
information
about
the object...



You mean printing everything on the screen? Attributes are not printed
by default, but you can print them by giving extra arguments to the
print.igraph() function. You can also make printing them the default:

igraph.par("print.edge.attributes", TRUE)
igraph.par("print.graph.attributes", TRUE)
igraph.par("print.vertex.attributes", TRUE)

Best,
Gabor




Cheers
Martin

On 9/2/2010 10:52 AM, Tamas Nepusz wrote:



Sorry, got it working with weights, the appraoch mentionned worked,
but
what confused me is that there is no access to a g$weights vector.
I
am
still not sure how to get the information for any individual edge.




E(g)[edgeindex]$weight seems to work for me in igraph 0.5.3. The
only
thing to watch out for is that edges are indexed from zero, not 1,
so
E(g)[1]$weight gives the weight of the second edge.













--
Martin Tomko
Postdoctoral Research Assistant

Geographic Information Systems Division
Department of Geography
University of Zurich - Irchel
Winterthurerstr. 190
CH-8057 Zurich, Switzerland

email:  address@hidden
site:   http://www.geo.uzh.ch/~mtomko
mob:    +41-788 629 558
tel:    +41-44-6355256
fax:    +41-44-6356848






--
Martin Tomko
Postdoctoral Research Assistant

Geographic Information Systems Division
Department of Geography
University of Zurich - Irchel
Winterthurerstr. 190
CH-8057 Zurich, Switzerland

email:  address@hidden
site:   http://www.geo.uzh.ch/~mtomko
mob:    +41-788 629 558
tel:    +41-44-6355256
fax:    +41-44-6356848






--
Martin Tomko
Postdoctoral Research Assistant

Geographic Information Systems Division
Department of Geography
University of Zurich - Irchel
Winterthurerstr. 190
CH-8057 Zurich, Switzerland

email:  address@hidden
site:   http://www.geo.uzh.ch/~mtomko
mob:    +41-788 629 558
tel:    +41-44-6355256
fax:    +41-44-6356848




reply via email to

[Prev in Thread] Current Thread [Next in Thread]