luukvdmeer / sfnetworks

Tidy Geospatial Networks in R
https://luukvdmeer.github.io/sfnetworks/
Other
334 stars 20 forks source link

Active weight column #262

Open latot opened 7 months ago

latot commented 7 months ago

Hi all, I has been using sfnetworks for a while now, and I have faced the next challenge, a network is usually used with a weight column, but this is in a concept, because a network can actually have several weight columns, distance of paths, time of paths, elevation models, etc, etc.

Usually I need to have a variable that specifies which column will be the weight column, I think would be great be able to have something similar as a active weight column, or an attribute where we can know which one is working in a particular context.

What I don't have very clear, is two points about how to support a feature like this one:

Actually, if a is used a special column, is like the second option would not be necessary, but implement the second option I don't know if would cause the first option to be useless, because have a specific column that always works as weight is a lot more comfy and useful than retrieve it from a function.

Is possible to even implement both of them.

Thx!

luukvdmeer commented 7 months ago

This is an issue that we have been talking about for a while. A problem is that tidygraph does not behave in the same way. In tidygraph you need to always explicitly specify which column to use as weight. Originally we have copied the igraph behavior, in whcih a column in the edges table named "weight" will be used as edge weight without specifying that explicitly, when we did not realize yet that tidygraph behaves differently. This has resulted in a confusing situation.

Since we primarily want to be a bridge between sf and tidygraph, we will probably change the behavior to align with tidygraph in the next version, meaning you will always have to explicitly state what column you want to use as weight (obviously this is a big breaking change). I do like the idea of setting an active weight column, but when tidygraph behaves differently, it would imho create only confusion. For example, when calling a sfnetwork function like st_network_paths() it would recognize this active weight column, but when calling a tidygraph function like centrality_betweenness() on the same network it would not. This harms the function of the package to provide a data structure on which you can apply simultaneously sf and tidygraph functions, enriched with spatial network specific functions of sfnetworks.

See also https://github.com/luukvdmeer/sfnetworks/discussions/192

What we do want to implement is that you can specify the weights in a tidy way, see https://github.com/luukvdmeer/sfnetworks/issues/116