Tools for Network Data Workflows
Overview
Builds, validates, analyzes, and visualizes network data from dyadic, event, matrix, 'igraph', and 'network' inputs. Supports cross-sectional, longitudinal, bipartite, and multi-layer networks, with conversion helpers for common modeling workflows and plotting utilities for exploratory analysis. Network methods are described in Wasserman and Faust (1994, ISBN:9780521387071), Cranmer et al. (2021) doi:10.1017/9781316662915, and Minhas et al. (2022) doi:10.1017/psrm.2021.56.
Behavior changes
These fixes change numbers that earlier versions reported.
summary()density excludes dyads with missing values from the denominator, matchingsna::gden(). Networks without missing dyads are unaffected.- Matrix, array, and list inputs whose diagonal is entirely zero are now read as having no self-loops (
diag_to_NA = TRUE), matching the igraph import path. Passdiag_to_NA = FALSEto keep self-loop cells in density andsummary_actor()prop_ties. to_netify()sets the diagonal of imported statnetnetworkobjects that do not allow loops toNA, matching the igraph import. Density for these networks now agrees withsna::gden(), and netify to statnet to netify round trips keep their density.
Show all changes in 1.5.4Hide the rest of the changes in 1.5.4
netify(..., output_format = "longit_array")respectsactor_pdsandactor_time_uniform = FALSE. Actors outside their active periods areNAin those periods.- Supplying
actor_pdswith gapped numeric time no longer creates empty periods for every integer in the range. - The stored
actor_pds(andget_actor_time_info(net)) uses time labels in the class of the time variable rather than integer positions. mixing_matrix()counts each undirected tie once, sototal_tiesis halved for symmetric networks and raw between-group cells hold half a tie in each mirrored cell. Proportions, assortativity, and modularity are unchanged.compare_networks()counts each undirected edge once inedge_changes. For networks with different actors, correlation, Jaccard, Hamming, QAP, and spectral distance are computed on the shared actors, with a message saying how many actors were left out.bootstrap_netlet()resamples longitudinal netlets by actor name, so the same actors are drawn in every period. Pairs formed by two copies of the same actor areNArather than 0, removing a downward bias in density.subset(from =, to =)on unipartite networks returns a square matrix over the union of the selected actors, with ties outside thefromxtoblock set toNA.
New warnings and messages
netify()warns whensymmetric = TRUEand a dyad appears in both directions within a period with different weights. The value from the last row is still used; usesum_dyads = TRUE,aggregate_dyad(..., symmetric = TRUE), orsymmetric = FALSEto resolve it.nodal_varsis documented as describingactor1, andnetify()reports actors that only appear asactor2, since they receiveNA.
Bug fixes
Subsetting and transformations
subset()/subset_netify()on longitudinal networks clips actor period bounds to the retained periods. Subsetting to several periods without both endpoints previously madeplot(x, time_filter = ...),decompose_netify(), andadd_node_vars()fail with "Actor period bounds are not in the netlet time labels."subset()returns requested periods in netlet order without duplicates.subset()down to a single period keys dyadic data as cross-sectional, sodyad_correlation(),attribute_report(),add_dyad_vars(),mutate_weights(), andpivot_dyad_to_network()find existing dyadic variables.subset()of a multilayer longitudinal array to one period returns a cross-sectional[actor, actor, layer]array.subset()on a bipartite network gives a clear error when the selected actors come from only one mode.ego_netify()subsetsactor_pds, nodal, and dyadic attributes to the ego network's actors and periods, and keeps the period name when only one period remains.mutate_weights()with onlyadd_constantchanges longitudinal arrays, updates weight attributes on every period of a longitudinal list, renames the layer of single-layer networks withnew_name, and works on multilayer networks.binarize()also works on multilayer networks.
Construction and attributes
nodal_vars,dyad_vars,add_node_vars(), andadd_dyad_vars()work with POSIXct time.
Plotting
plot()draws each tie once in undirected networks.plot()works for bipartite networks where an actor appears in both modes (for examplemexico).summary_actor()returns plain actor names for these networks with anactor_modecolumn.plot(..., static_actor_positions = TRUE)works for longitudinal bipartite networks.layout = "sugiyama"works inplot()andget_node_layout().point_layoutaccepts a single data.frame reused across periods.plot_homophily(type = "distribution")works for longitudinal networks.label_size_by,label_color_by,label_fill_by, andlabel_alpha_byno longer trigger an "Unknown parameter" warning.node_filterin longitudinal plots removes edges only in the periods where an endpoint is filtered out.time_filteraccepts numeric time labels such astime_filter = 2012when they are not valid indices, and lists the available periods when nothing matches.
Analysis
homophily(),mixing_matrix(),attribute_report(), anddyad_correlation()work on multilayer longitudinal netlets stored as lists.homophily(method = "hamming")andmethod = "jaccard"accept character, factor, and logical attributes.dyad_correlation()aligns dyadic covariates to network actors by name.compare_networks(by = ...)works forwhat = "structure","nodes", and"attributes", and gives a clear error for edge comparisons.
Converters
netify_to_statnet()accepts factor and Date nodal attributes.netify_to_amen(lame = TRUE)andto_lame(lame = TRUE)orderXrowandXcolrows to match each period's actors.- The
to_lame()$ame_callsnippet runs with current lame, andfrom_lame_fit()returns a longitudinal netify for longitudinallame::lame()fits.
Documentation
- The
animate_netify()example runs only when gganimate is installed. - The
peek()example uses actor names that exist inicews.
From NEWS.md in the release
Install
Health
- OK13 OK2026-08-05
- NOTE12 OK, 1 NOTE2026-08-01
- OK6 OK2026-07-01
Documentation
- Help pages
- 129 (2 internal)
- Examples that run
- 55%34 run in a plain check · 28 only when donttest examples are enabled (R CMD check --as-cran)
- Exported functions with examples
- 51%
- Documented parameters
- 100%
- Return-value docs
- 100%
- Help pages citing references
- 3%
Downloads
Repository
- PRs merged (all time)
- 67%
- Median days to close, 50 most recently updated closed issues
- not measured
- Median days to close, 50 most recently updated closed PRs
- 0
Stars over time
Forks over time
Releases over time
Commits over time
5 development-tooling and community-health practices detected across 3 families in the upstream repository
Checks run against github.com/netify-dev/netify on 2026-10-22.
GitHub Pages site last deployed 2026-10-21 · The repository has a site deploy workflow
pkgdown site last built 2026-10-21
Dependencies
Installing netify adds 26 packages (14 with compiled code, 23 MB of source tarballs). Heaviest: ggplot2 6.0 MB, igraph 4.8 MB, Rcpp 1.8 MB.
Code & Tests
Datasets
People & History
Pick two releases to compare their code metrics.
- 1.5.4Latest
- 1.5.32026-06-30
- RR 4.6.0 released · 2026-04-24
Package metadata
- First published
- 2026-06-30
- Total releases
- 2 / 1 yrs
- License
- GPL-3 OSI
- Minimum R
- ≥ 3.5.0
- Bundled data
- 2.8 MB / 6 files
- Download size
- 4.2 MB
Cite
Cite this package
Run in R for the authors' preferred citation:
citation("netify")This package has no citation file, so citation() returns this entry built from DESCRIPTION.
Cite the R Observatory
For a number measured here: a download total, a coverage figure, an archival date.
From data release v2026-10-25, which the citation names so these numbers can be found later. More on citing and the projects behind them.