Skip to content

Conversation

@schochastics
Copy link
Contributor

@schochastics schochastics commented Apr 16, 2025

Fix #917
Fix #918

This PR introduces an error message if inputs to

  • graph_from_adjacency_matrix()
  • graph_from_biadjacency_matrix()
  • graph_from_edgelist()
  • graph_from_data_frame()

contains NAs

@aviator-app
Copy link
Contributor

aviator-app bot commented Apr 16, 2025

Current Aviator status

Aviator will automatically update this comment as the status of the PR changes.
Comment /aviator refresh to force Aviator to re-examine your PR (or learn about other /aviator commands).

This pull request is currently open (not queued).

How to merge

To merge this PR, comment /aviator merge or add the mergequeue label.


See the real-time status of this PR on the Aviator webapp.
Use the Aviator Chrome Extension to see the status of your PR within GitHub.

Copy link
Contributor

@krlmlr krlmlr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, great! Should we do another round here?

@krlmlr
Copy link
Contributor

krlmlr commented Apr 29, 2025

Has conflicts too.

@szhorvat
Copy link
Member

FYI I've been working on NaN passthrough for the adj. mat. functions in the C core, which would preserve NA values.

@schochastics
Copy link
Contributor Author

FYI I've been working on NaN passthrough for the adj. mat. functions in the C core, which would preserve NA values.

@szhorvat Whats the use case you have in mind? Working with missing data? Is it still ok to kick it out here?

@szhorvat
Copy link
Member

szhorvat commented Apr 29, 2025

Original motivation was to support the R interface better. On the C side we don't try to distinguish between different types of NaNs, but if we pass through NaNs untouched, then the NaN/NA distinction survives for R. We don't have to do it if you don't think it's important.

If you do think it's useful, should should still go ahead with this PR. The requirements can be relaxed in the future, we can still do it.

@schochastics
Copy link
Contributor Author

I think for now NAs should through errors. But I have been thinking about how to use NAs for missing values in network data (when data was gathered and there is non-response). It is a very practical, non graph-theoretic problem but important in SNA. I gotta check how people currently deal with it. But that is a task for a day when the interface is clean(ish)

@maelle
Copy link
Contributor

maelle commented Jun 2, 2025

@schochastics should this PR become a draft PR?

@schochastics
Copy link
Contributor Author

Maybe we need to discuss this. I think it is ok to through errors for NAs for now so we might want to merge it soon-ish

@szhorvat
Copy link
Member

szhorvat commented Jun 2, 2025

I think for now NAs should through errors.

Just to be clear, I agree with this.

We can always relax this later when the C core becomes capable of passing through NAs unaltered.

Copy link
Contributor

@krlmlr krlmlr left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks, great!

graph_from_edgelist <- function(el, directed = TRUE) {
if (!is.matrix(el) || ncol(el) != 2) {
cli::cli_abort("graph_from_edgelist expects a matrix with two columns")
cli::cli_abort("graph_from_edgelist expects a matrix with two columns.")
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should be markup, but we'll address this later with assistance.

@krlmlr krlmlr merged commit 82cfb38 into main Jun 5, 2025
1 of 3 checks passed
@krlmlr krlmlr deleted the fix-NA-entries branch June 5, 2025 09:12
@krlmlr
Copy link
Contributor

krlmlr commented Jun 5, 2025

Thanks!

schochastics added a commit that referenced this pull request Aug 25, 2025
Co-authored-by: Kirill Müller <krlmlr@users.noreply.github.com>
krlmlr added a commit that referenced this pull request Oct 13, 2025
igraph 2.2.0

Update C core to version 0.10.17. See <https://github.com/igraph/rigraph/blob/20552ef94aed6ae4b23465ae8c7e4d3b0e558c71/src/vendor/cigraph/CHANGELOG.md> for a complete changelog, in particular the section "Breaking changes".

- Generate almost all R implementations (#2047).

- Expose `align_layout()` and add to `layout_nicely()` to align layout with axis automatically (#1907, #1957, #1958).

- Expose `simple_cycles()` which lists all simple cycles (#1573, #1580).

- Expose `is_complete()`, `is_clique()` and `is_ivs()` (#1316, #1388, #1581).

- Expose `find_cycle()` (#1471, #1571).

- Expose `feedback_vertex_set()` to find a minimum feedback vertex set in a graph (#1446, #1447, #1560).

- Add `weights` parameter to `local_scan()` (#1082, #1448, #1982).

- Add more layouts to `tkplot()` (#160, #1967).

- Add `plot(mark.lwd = )` to change line width of mark.groups (#306, #1898).

- Add `plot(vertex.label.angle = , vertex.label.adj = )` arguments to rotate vertex labels (#106, #1899).

- Add relative size scaling to vertices in `plot()` (@gvegayon, #172).

- Split `sample_bipartite()` into two functions for the G(n, m) and G(n, p) case (#630, #1692).

- Implement multi attribute assignment (#55, #1916) and adding attributes via data frames (#1373, #1669, #1716). Support factors in `graph_from_data_frame()` (#34, #1829).

- All `_hrg()` functions check their argument (#1074, #1699).

- HRG printing with `type = "auto"` uses `"plain"` for large trees (#1879).

- `get_edge_ids()` accepts data frames and matrices (#1663).

- `igraph_version()` returns version of C core in an attribute (#1208, #1781).

- Breaking change: change arguments default and order for `graph_from_lcf()` (#1858, #1872).

- Breaking change: Subset assignment of a graph avoids addition of double edges and ignores loops unless the new `loops` argument is set to `TRUE` (#1662, #1661).

- Breaking change: remove deprecated `neimode` parameter from `bfs()` and `dfs()` (#1105, #1526).

- Breaking change: stricter deprecation of non-functional parameters of `layout_with_kk()` and `layout_with_fr()` (#1108, #1628).

- `NA` attribute values are replaced with default values in `plot()` (#293, #1707).

- `NA` checking only in from/to columns of edge data frame (#1906).

- Keep vertex attribute type for `disjoint_union()` (#1640, #1909).

- Error in bipartite projection if `type` is not a vertex attribute (#898, #1889).

- Do not try to destroy non-initialized SIR objects upon error (#1888).

- Added proper `NA` handling for matrix inputs (#917, #918, #1828).

- Remove string matrix support from functions operating on biadjacency matrices (#1540, #1542, #1803).

- Integer vectors are validated before transferring them to the C library (#1434, #1582).

- Changed base location for `graph_from_graphdb()` and added tests (#1712, #1732).

- Recycling of logical vectors when indexing into edge/vertex selectors now throws an error (#848, #1731).

- Use `function()` instead of `(x)` in `arrow.mode` (#1722).

- Temporarily disable generating an interface for `igraph_simple_cycles_callback()` as the framework for handling callback functions is not yet present.

- Adjust loop position to vertex size in `plot()` (#1980).

- Don't rescale plot coordinates to `[-1,1] x [-1,1]` by default (#1492, #1956, #1962).

- Fail if `"layout"` attribute doesn't match the number of vertices (#1880).

- Automatically arrange loops in `plot()` (#407, #556, #1881).

- Vectorized drawing of arrows in `plot()` (#257, #1904).

- Allow more than one edge label font family in `plot()` (#37, #1896).

- Pie shapes now work as intended (#1882, #1883).

- Loops not plotted on canvas (#1799, #1800).

- Replace `NA` values in `label` attributes in `plot()` with default values (#1796, #1797).

- Removed duplicated plotting of arrow heads (#640, #1709).

- Correct mapping of edge label properties in plots when loops are present (#157, #1706).

- Welcome Maëlle Salmon and David Schoch as authors (#1733), add author links (#1821).

- Remove demos (#2008).

- Add 2023 preprint (#1240, #1984).

- Update allcontributors info (#1975).

- Link to replacements of deprecated functions (#1823).

- Add documentation of all file formats to `read_graph()` and `write_graph()` (#777, #1969). Recommend `saveRDS()` and `readRDS()` for saving and loading graphs (#1242, #1700).

- Document return value of `make_clusters()` (#1794).

- Clarify that `girth()` returns `Inf` for acyclic graphs (@eqmooring, #1831).

- Clarify the use of weights in `layout_with_kk()`.

- Refer to current latest version of R in troubleshooting page.

- Fix typos in `laplacian_matrix()` documentation.

- Document ellipsis in `cohesion()` (#971, #1985).

- Correct the description of the `weights` parameter of `hits_scores()`.

- Better describe output of `all_shortest_paths()` (#1029, #1778).

- `make_graph()` now supports `"Groetzsch"` as an alias of `"Grotzsch"`. This change was implemented in the C core.

- Update description of `order` parameter of `ego()` and related functions (#1746).

- Added lifecycle table (#1525).

- Add more about igraph.r2cdocs in the contributing guide (#1686, #1697).

- Accelerate check if an index sequence corresponds to the entire list of vertices (#1427, #1818).

- Faster single bracket querying of a graph (#1465, #1658).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

5 participants