Skip to content

inconsistent behaviour of get.adjacency.dense and get.adjacency.sparse for weighted multigraphs #1551

@schochastics

Description

@schochastics

What happens, and what did you expect instead?

The internal functions get.adjacency.dense() and get.adjacency.sparse() return different results for weighted multigraphs. get.adjacency.sparse() aggregates weights for multi edges and get.adjacency.dense() reports the weight of the last edge. In my opinion, the behavior of get.adjacency.sparse() is correct. The PR #1518 coincidentally fixes this.

Given this is indeed a bug, then the following test should be fixed either in a new PR or the existing PR #1518 (see also the discussion there)

expect_equal(
weight_adj_matrix,
matrix(
c(0, 3.4, 0, 0, 1.2, 2.7, 0, 4.3, 0, 0, 6, 0, 0, 0, 0.1, 0),
nrow = 4L,
ncol = 4L,
dimnames = list(c("a", "b", "c", "d"), c("a", "b", "c", "d"))
)
)

To reproduce

igraph 2.0.3

library(igraph)
#> 
#> Attaching package: 'igraph'
#> The following objects are masked from 'package:stats':
#> 
#>     decompose, spectrum
#> The following object is masked from 'package:base':
#> 
#>     union
g <- make_graph(c(1,2, 2,1, 2,2, 3,3, 3,3, 3,4, 4,2, 4,2, 4,2), directed = TRUE)
E(g)$weight <- c(1.2, 3.4, 2.7, 5.6, 6.0, 0.1, 6.1, 3.3, 4.3)
as_adjacency_matrix(g, attr = "weight", sparse = FALSE)
#>      [,1] [,2] [,3] [,4]
#> [1,]  0.0  1.2    0  0.0
#> [2,]  3.4  2.7    0  0.0
#> [3,]  0.0  0.0    6  0.1
#> [4,]  0.0  4.3    0  0.0
as_adjacency_matrix(g, attr = "weight", sparse = TRUE)
#> 4 x 4 sparse Matrix of class "dgCMatrix"
#>                       
#> [1,] .    1.2  .   .  
#> [2,] 3.4  2.7  .   .  
#> [3,] .    .   11.6 0.1
#> [4,] .   13.7  .   .

Created on 2024-10-10 with reprex v2.1.1

System information

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions