generate_man() so that it no longer raises an
error where no dyad census is given
n is a number of nodes rather than an existing
network, man now defaults to
c(0.25, 0.5, 0.25), the dyad distribution of a random
digraph in which each arc is present with probability 0.5, so that
generate_man(6) is now possible and returns the same
distribution of networks as
generate_random(6, 0.5, directed = TRUE)generate_man(c(4,6)), where the dyad census is
conditioned on the dyads between the modes; since ties in two-mode
networks are undirected, mutual and asymmetric dyads are both realised
as a tieman of the wrong length now reports what was expected
and what was given, instead of the message for man not
having been given at allman, which promised
that a count such as c(10,0,20) would be treated as a
count; such vectors are normalised into proportions, so the dyad census
of an existing network is reproduced in expectation rather than
exactlycollect_cran() so that it returns a scoped,
correctly parsed network of package dependencies
dependencies, which selects the fields to collect
and defaults to c("Depends", "Imports", "LinkingTo"), the
dependencies that must be installed alongside a package, as in
install.packages(); Suggests is no longer
collected by default, since including it grows the dependency closure of
manynet from 28 packages to 2348LinkingTo and Enhances can now be
collected, where they were previously ignored altogethermax_dist and direction, so that
dependencies can be collected to a given number of steps and in either
direction,
e.g. collect_cran("manynet", direction = "in", max_dist = 1)
returns the packages that depend directly upon manynetpkg now accepts a vector of package names, where more
than one name previously raised a “the condition has length > 1”
error, and names that are not on CRAN are now reported instead of
silently returning an empty networkcollect_cran() raising a “trying to use CRAN
without setting a mirror” error wherever no repository is set, as in
non-interactive sessions, which had made it impossible to testversion, published,
compiled, priority, license, and
on_cran, the last of which distinguishes the several
hundred dependencies, mostly Bioconductor packages, that are not
themselves on CRAN; Compilation is renamed
compiled and is no longer missing for every nodeto_uniplex(net, "Imports") scopes the network to one
kind of dependencycollect_pkg() to use R’s own parser rather
than regular expressions to find function definitions and calls
to_ego() previously had
an in-degree of 10 in manynet’s own network, where it is in
fact called nowhere=, defined as a
\(x) lambda, or whose function keyword falls
on a later line are now found, where only four hardcoded spacings of
<- function were recognisedNAMESPACE, together with a generic nodal
attribute, so that dispatch is represented and
to_blocks(net, node_attribute(net, "generic")) collapses
the network onto its genericsexternal, FALSE by default, so that
calls to functions defined outside the directory are no longer included
as nodes; namespaced calls are now qualified, so that
e.g. igraph::V() cannot be confused with a locally defined
V()file, lines,
exported, and generic, and ties are weighted
by the number of call sitescollect_pkg() now reports through the usual console
interface rather than base warning(), no longer raises a
“number of items to replace is not a multiple of replacement length”
error, and returns a network rather than a list where no functions are
foundmake_cran to
make_collect, and corrected it where it still described
collect_cran() and collect_pkg() under their
former names read_cran() and read_pkg()create_cycle(n, directed = TRUE) to construct its
cycle directed rather than relying on edgelist coercion to do soas_igraph() always returning a directed
graph for edgelist or stocnet objects, discarding the network’s own
directedness
is_acyclic() now returns FALSE and
is_connected() returns TRUE for undirected
networks through as_edgelist()is_directed() already didinfo$directed for stocnet
objectsto_component() so that it returns a single,
chosen component, instead of being an alias of to_giant()
component selects the component to retain, by default
1, i.e. the largest (giant) component, with 2 the second largest, and so
oncomponent may alternatively name a node, in which case
the component containing that node is retained,
e.g. to_component(fict_greys, "Miranda Bailey")to_giant() is now a wrapper, such that
to_giant(.data) is
to_component(.data, component = 1), and is no longer
genericto_components() to return its components
ordered from largest to smallest, so that
to_components(.data)[[n]] is
to_component(.data, n); igraph::decompose()
returns them in discovery orderconnectivity argument to
to_component(), to_components(), and
to_giant(), “weak” by default since a giant component is
conventionally the weak one, and “strong” where ties must run in both
directions between members
connectivity rather than igraph’s
mode, which is reserved in this package for one- and
two-mode networksto_giant(fict_starwars, connectivity = "strong")
is a “Giant strong component of Star Wars network data”to_uniplex() erroring on networks it cannot
reduce, and generalised where it looks for the tie types:
type == tie”
error, and are now returned unchanged, as in to_waves() and
to_slices()to_uniplex(as_stocnet(ison_algebra), "tasks") now
workstype column, so a tie attribute named “tie” no longer
shadows the tie argumentto_ego() obtaining the neighbourhood of every
node in the network before discarding all but one, which made it
prohibitively slow on larger networksto_labelled()/to_named() on
edgelists, which extracted the node columns with [, 1], so
that a tibble edgelist raised a “‘list’ object cannot be coerced to type
‘double’” error
NA
with as.numeric()to_eulerian() as of limited value outside of
producing one example of is_eulerian()connectivity argument to
is_connected(), so that weak connectivity can be tested
directly rather than by calling to_undirected() first just
to ask the question
is_labelled() and is_twomode()
extracting edgelist columns with [, 1], returning a
one-column tibble rather than a vector so that every labelled edgelist
was reported as unlabelled and as two-modeis_attributed() returning TRUE for
every network object because vertex.names and
na, that class’s internal bookkeeping, were counted as
substantive nodal attributesis_complex.stocnet() looking for
from and to at the top level rather than in
ties, which always returned FALSEis_aperiodic() returning NA for
networks with no cycles, such as directed acyclic graphs, where the
greatest common divisor of an empty set of cycle lengths is undefined
actions/checkout@v7,
actions/upload-artifact@v7,
actions/download-artifact@v8), replacing some long-outdated
@v2 pinsvignettes/articles/ from
inst/tutorials/ and fails if the committed articles have
drifted
data-raw/build_tutorial_articles.R is now tracked in
the repository (it was previously excluded by .gitignore)
so that the check can runcheck
rather than the website dependencies{netrics}, {autograph}, and
{migraph}{knitr} and {rmarkdown} from
Suggests, since neither was used by the package or its
tests
knitr::purl(), and no longer render the
{learnr} tutorials (a fragile check that added no coverage
beyond running the tutorial code itself){learnr} to
Config/Needs/website.github/CONTRIBUTING.md so that it is available to all
contributorsas_*list() family
to expect NULL where a network or object class genuinely
holds no such information, instead of reporting these as audit
itemscreate_degree() so that it no longer raises an
uninformative error where no degree sequence is given
outdegree nor indegree is
given, the sparsest connected structure of that size is created: a cycle
for one-mode networks, and for two-mode networks one in which the larger
mode is 1-regular and the ties are spread as evenly as possible across
the smaller modestopifnot() messagecreate_degree() returning two-mode networks with
the modes reversed, e.g. create_degree(c(6,4)) returned a
network with 4 nodes in the first mode and 6 in the secondcreate_cycle() and create_wheel()
on two-mode networks so that, instead of raising an error where the
requested number of nodes cannot form such a structure, the largest such
structure is created and the surplus nodes are added as isolates, with a
message explaining this
create_cycle(c(4,6)) now returns
an 8-cycle and two isolatescreate_wheel(c(4,6)) now returns a
wheel on 7 nodes and three isolatescreate_cycle() and create_wheel() are now
also listed and described in the documentation for the defined
structures, where they were previously only aliasedas_network() assigning the whole vector of a
nodal attribute to every node where the network had just one such
attribute, which also made the resulting object impossible to coerce
backas_changelist(), as_globallist(),
as_infolist(), and as_nodelist() methods for
matrices and edgelists, which now return NULL instead of
raising a “no applicable method” error, since these formats have nowhere
to hold network-level information (matrices and edgelists do carry node
labels, so as_nodelist() returns those where present)as_globallist.network(), so that a globallist
stored on a network object by as_network() can
be retrieved againas_network() dropping all tie attributes other
than the weight, since networks were constructed from a sociomatrix;
other tie attributes are now copied across dyad by dyad, so
e.g. add_tie_attribute() on a network object
now returns an object holding that attributeas_igraph.network() copying
network’s internal vertex.names attribute
across as an ordinary nodal attribute, which shadowed the node labels
when coercing back to a network (e.g. adding nodes to a
network returned an object with missing names), and copying
the internal na attribute where it was not the first
attributeis_twomode() on partially labelled matrices
raising a “missing value where TRUE/FALSE needed” error, since comparing
missing row and column names returned NA; such matrices are
now treated as one-modeadd_ties() to accept several ways of declaring
ties, so that what is documented is now what is possible:
add_ties(net, 3), adds that
number of ties at random among the dyads not already tied (respecting
directedness and two-modeness), which was previously documented but not
implementedcreate_explicit(),
e.g. add_ties(net, Betty -+ Tina),
add_ties(net, 1 ++ 3), or
add_ties(net, Betty:Sue -+ Tina), with several ties
declared at once by wrapping them in c(), and one-sided
formulae, e.g. ~ Betty -+ Tina, accepted for programmatic
useadd_ties(net, c("Betty","Tina")), continues to work,
as does ordinary arithmetic in the argument, since tie syntax requires
+ or - at both ends of the operatoradd_ties() on weighted networks giving the new
ties a missing weight, which is not representable in matrix or
{network} formats; they are now given a weight of 1 unless
one is passed in attr_listadd_ties() and delete_ties() raising
errors for network objects with a single nodal attribute
(see the as_network() fix above)add_nodes() so that nodes added to a labelled
network are labelled too, e.g. “N9” and “N10” where eight nodes were
already named, since partially labelled networks are ambiguous for other
functions and other classes (previously such networks raised a “missing
value where TRUE/FALSE needed” error when coerced to a matrix or
network object)bind_changes() on stocnet objects
raising a “Can’t combine ..1$value ..2$value value column in a list but changelogs already on the object
store value as an atomic vector; the two changelogs’
value columns are now reconciled before binding, falling
back to a list-column (or to character) only where the values genuinely
cannot be held in one vectorto_waves():
attribute when the
network is not marked longitudinal, i.e. when the tie attribute is not
called “wave” or “panel” (fixing the silent no-op behind
stocnet/autograph#40)to_waves(cumulative = TRUE) no longer mangles
single-wave results..1 ..2 to_waves(fict_starwars) now returns all seven
waves rather than six) and each wave holds the ties of that wave
(previously to_waves(fict_potter) returned an empty last
wave)to_slices() erroring on networks it cannot slice:
time <= moments” error, and are now returned unchanged,
as in to_waves()weight != 0” error, since ties can only be dropped for
summing to zero where they carry a weightto_time() to handle interval (spell) networks
whose ties carry begin/end lifespans
(e.g. irps_wwi): supplying a time returns the
ties active at that moment (using the half-open
begin <= time < end convention shared with
network::networkDynamic), while omitting time
returns a list of slices, one per change point (each moment at which
some tie begins or ends). Previously to_time() reported
such networks as unavailableto_time.igraph(), and time now
defaults to missing so the slice-generating form can be called as
to_time(net)gloss() to return the requested term
italicised where no glossary entry exists instead of raising an
errorrevdep/ to .Rbuildignore so that
reverse-dependency check artefacts are no longer bundled into the source
tarball, resolving CRAN NOTEs about a non-standard top-level directory,
an over-large tarball, and a stray CITATION fileas_matrix() on two-mode networks constructing the
incidence matrix via structure() with the deprecated
special names .Dim/.Dimnames, which now use
dim/dimnames (resolving a CRAN NOTE)data-raw/cheatsheet/;
Rscript data-raw/cheatsheet/build.R recompiles the PDF and
one PNG per page and distributes them to inst/figures/,
man/figures/, and the pkgdown sitetests/testthat/test-functional_*.R) that automatically
enumerates exported functions by family prefix (to_*,
from_*, is_*,
net_*/node_*/tie_*,
as_*list,
create_*/generate_*/play_*, and
the add_*/mutate_*/filter_*/etc.
manipulation verbs) and audits each across a standard grid of fixture
networks (directed, two-mode, weighted, signed, multiplex, longitudinal)
and object classes (tidygraph, igraph, matrix, network, edgelist,
stocnet), raising package test coverage from ~52% to over 70%
.data-first
arguments, default methods, name-implied invariants such as
!is_directed(to_undirected(x)), per-node/per-tie result
lengths, and cross-class agreement)AUDIT [...] message
rather than failed, marking where implementations still need workwrite_gml(), write_gdf(), and
write_dynetml() as export counterparts to
read_gml(), read_gdf(), and
read_dynetml() (closes #148)
write_dynetml() records the network’s directedness in
the isDirected attribute of the DyNetML
<network> element, and read_dynetml()
now respects it when reconstructing the graphwrite_gml() converts any logical graph/vertex/edge
attributes to integer before export, avoiding igraph’s “boolean
attribute was converted to numeric” warningread_gdf() dropping node attribute names when a
GDF file defines only a single node attribute columnas_stocnet() and as_siena()
as_stocnet() now unpacks the full contents of a
‘sienadata’ object: multiple dependent networks (as tie layers),
behavioural dependents and varying covariates (as nodal changes),
constant covariates (as nodal attributes), constant and varying dyadic
covariates (as tie layers), composition change (as nodal changes), and
multiple node sets (as modes), preserving node labels and missing
valuesas_siena.stocnet() reconstructs an equivalent
‘sienadata’ object, round-tripping values exactly (including covariate
centering, which RSiena stores mean-centered)info slots to support this:
focal (now a character vector naming all dependent
variables), centered (a named logical vector of covariate
centering), and siena (a sublist carrying RSiena-specific
estimation metadata)as_siena() now routes any coercible object (igraph,
tidygraph/mnet, matrix, network, …) through the ‘stocnet’ path via a
single as_siena.default() method, so multiplex layers,
waves, and covariates are carried across; longitudinal networks whose
waves are held in a wave/time tie attribute
now convert directlyas_siena() gives clearer errors: a helpful message when
a network has fewer than two waves
(e.g. as_siena(ison_adolescents)) or when a dependent
network is valued/signed rather than binary (suggesting
to_unweighted()), and passes categorical nodal attributes
to SIENA as numeric-coded covariatesas_igraph()/as_tidygraph()/as_network()
coercions of ‘sienadata’ objects, which previously did not dispatch
because RSiena objects are classed sienadata rather than
siena; these now route through the richer ‘stocnet’
pathas_nodelist.network() retaining a spurious
all-FALSE na column, caused by testing a
non-existent names field instead of the na
column when deciding whether to drop itas_stocnet() warning about an unknown
type column when coercing an igraph-like network that
counts as multiplex only by virtue of carrying a non-reserved tie
attribute; the type-to-layer renaming now only
runs when a type column is presentdelete_node_attribute() and
delete_tie_attribute(), the {igraph}-style
counterparts to
add_node_attribute()/add_tie_attribute(), so
that attributes added the {igraph} way can also be removed
that way (deletion via mutate_*(attr = NULL) remains the
{tidyverse}-style route); each accepts a character vector
to remove several attributes at onceapply_changes() emitting a spurious deprecation
warning by calling the defunct collect_changes() internally
instead of its replacement, gather_changes()filter_changes() and
select_changes() emitting a tidyselect deprecation warning
by passing .by (and, for select_changes(), a
spurious .by) as an external vector into a selection
contextfilter_changes() to accept node labels as well
as indices, so a changelog can be subset by name,
e.g. filter_changes(fict_starwars, node == "Anakin")select_ties() on ‘stocnet’ objects dropping the
mandatory from/to columns when they are not
among the selected columns; they are now always retained, as tidygraph
does when selecting among edge attributescreate_motifs() to to_motifs(),
since unlike the other create_*() functions it does not
return a single network but a named list of small networks (one per
motif), joining the to_*() functions (such as
to_components() and to_subgraphs()) that
return lists of networks
to_motifs() takes .data as its first
argument, which accepts either a network (whose size, direction, and
signedness are inferred) or a plain integer number of nodes, so that
e.g. to_motifs(3) lists all three-node undirected motifs
for teachingn argument to to_motifs(), so
that either or both of .data and n may be
given: passing only .data infers n from the
network, passing only n builds motifs of that size
directly, and passing both uses the network for the kind of motif while
n selects the size (e.g. the dyadic, triadic, or tetradic
motifs of an undirected network)signed argument to to_motifs(),
enumerating the signed motifs of undirected networks for
n=2 (+, -) and n=3
(the structural-balance triads +++, ++-,
+--, --- and their incomplete forms)to_motifs(2, directed = TRUE, signed = TRUE)): the
Holland-Leinhardt dyad census (Null,
Asymmetric, Mutual) refined by arc sign into
Asymmetric+/- and Mutual++/--/+-, documented
alongside their correspondence to the dyadic reciprocity motifs of Gallo
et al. (2025)bmotif dictionary IDs (Simmons et al. 2019), returned
for two-mode input (which previously errored, caused by a length-two
vector reaching a scalar if() size check)create_motifs() as an alias of
to_motifs(), since it is relied upon by other
stocnet packages (e.g. autograph)to_named() to to_labelled() and
to_unnamed() to to_unlabelled() for
consistency with is_labelled() and
node_labels(); to_named() and
to_unnamed() remain available as aliases since they are
relied upon by other stocnet packagesto_wave() as an alias of to_time(),
matching the wave-based vocabulary of net_waves() and
to_waves() when extracting a single wave of a longitudinal
networkto_component() as an alias of
to_giant(), giving the “keep the one main component” verb a
singular name that corresponds to the plural
to_components() (which returns a list of all components),
following the to_subgraph()/to_subgraphs()
patternto_uniplex() throwing an error on unsigned
multiplex networks (e.g. to_uniplex(irps_911, "trust")) due
to an operator precedence bug in the check for dropping an
all-positive/all-NA sign columnto_hypergraph() crashing the R session (“segfault
from C stack overflow”) on directed networks, by converting to
undirected before the maximal clique search; the crash is an upstream
igraph 2.3.3 bug triggered when igraph::max_cliques() is
called on a directed graph after
igraph::any_multiple()to_mode1() and to_mode2() to
return one-mode networks unchanged, so projection is a no-op rather than
an error when the network is already one-modefrom_waves() and from_slices()
dropping isolates and node attributes when reassembling labelled
networks, by binding the waves’/slices’ node tables as well as their tie
tables (e.g. from_waves(to_waves(fict_potter)) now recovers
all 64 nodes rather than only the 39 with ties)from_ties() warning “NAs introduced by coercion”
when the merged networks record different DOIs; the first DOI is now
kept (dates still keep the earliest)from_ties() on tidygraph objects reporting the
first input’s tie-type metadata (e.g. “friendships”) from
layer_names() instead of the newly created layers; the
merged network now records its layers as tie-type metadatanode_names() to node_labels() for
consistency with is_labelled() and
to_labelled(); node_names() remains available
as an alias since it is relied upon by other stocnet
packagesnet_dims() to mode_nodes() for
consistency with mode_names() and net_modes();
net_dims() remains available as an alias since it is relied
upon by other stocnet packageslayer_ties(), reporting the number of ties in
each layer of a multiplex network (in layer_names() order),
mirroring how mode_nodes() reports nodes per modenet_waves(), an S3 generic reporting the
number of waves/panels in a longitudinal network (closes #152),
following the net_layers() pattern and consistent with
is_longitudinal()’s wave/panel definitionprint()/describe_ties() reporting the total
tie count for every layer (e.g. “1241 relationship ties and 1241
affiliation ties” for fict_marvel) instead of the per-layer
counts (“558 relationship ties and 683 affiliation ties”)layer_names() returning nothing for multiplex
networks that store their tie types only in a type tie
attribute (e.g. ison_lawfirm, irps_911) rather
than a graph-level attribute; it now falls back to the unique values of
type when presentmode_names() returning nothing for two-mode
‘stocnet’ objects whose mode names are recorded only in the nodes
table’s mode variable rather than in the
info$modes metadata; it now falls back to the unique values
of mode, mirroring layer_names()’s fallback to
the layer tie variablemanynet1 and manynet2
(package-prefixed rather than numbered
tutorial1a/tutorial1b, to avoid renumbering
clashes with tutorials in sibling packages):
.callout style using a thin border
and label text in the tutorial theme’s accent colour (manynet’s mustard
yellow, #D6A929, sampled from the hex logo), rather than a
filled background boxison_*), fictional
(fict_*), or real-world (irps_*) networks,
with curated per-flavour dataset menus and structural self-checks at
each free-play exercise, and an optional “Going deeper” data-tidying
section in the manipulating tutorial##) topics and cannot nest ### subsections;
these scroll within the current topic via JavaScript rather than
#anchor links, since learnr’s own router intercepts any
hash navigation and resets to the first topic if the hash isn’t a
registered topic idgloss() and a
printed glossary at the end of each tutorialstocnet class and its anatomy
(info/nodes/ties/changes/globals) before moving on to
importing/exporting external datafict_marvel multiplex networkcreate_explicit() (with an
undirected and a directed exercise), and describing
collect_ego() for interactive ego-network collection (noted
as console-only, since it cannot run inside the tutorial window)table_data() at render time, so
they no longer go stale as datasets are addedread_nodelist() instead of
read_edgelist()tempdir() to avoid
permission errors on installed packages[/[[/$ operators); Nodal
properties (adding/removing nodes, labels, attributes); Tie properties
(adding/removing ties, attributes, direction, weights, signs); Multiplex
networks (joining, layers); Multimodal networks (modes); Dynamic
networks (waves, changes); and a closing Selecting and cleaning section
(subgraph filtering, isolates/giant/simplex) that narrows the fully
built-up object down before the summary pipeline. The
reformatting/transforming vocabulary is kept as a callout rather than
the organising structure, and each element’s composition verbs
(add_nodes()/delete_nodes(),
add_ties()/delete_ties()) lead into that
element’s own section
is_longitudinal()/is_dynamic()/is_changing(),
net_waves(), to_time(),
to_waves(), and the *_changes() family
(filter_changes(), apply_changes()),
previously untreated in the tutorials[/[[ operators
section with $ get/set, and cross-referenced it as the
do-it-yourself alternative alongside named functions throughout
(e.g. net$name <- beside
to_labelled())layer_names()/to_uniplex()
(multiplex layers) and
to_onemode()/to_twomode()/to_multilevel()
(mode conversion) coverage alongside the existing two-mode projection
materialsigned, longitudinal, and
dynamic glossary entries to support the new sections’
hover-term definitionsas_igraph.stocnet() handled unlabelled
two-mode networksto_hypergraph() for converting one-mode or
two-mode networks to hypergraph representations (closed #145)
is_hypergraph() for identifying hypergraph
representationsnode_attribute.network() and
tie_attribute.network() for extracting node and tie
attributes from ‘network’ objectsnet_node_missing() and
net_tie_missing() for identifying missing nodes and ties in
networks (closed #144)add_info() to ask for a focal layer if the
network is multiplex and no layer is specifiedlayer_names() to be more robust to missing
referencesmode_names.stocnet() and
layer_names.stocnet() to look up correct info namesadd_info()
add_info(.data) (so no further arguments) now checks to
see whether metadata may be added and prompts the user to add it if
soadd_info(.data, optional = TRUE) extends this to
further, optional metadata{autograph}, {netrics}, and
{migraph}expect_nodes()/expect_ties() and
introduces internal active-context helpersas_diffusion.igraph() to derive diffusion events
from changelistsfilter_ties.igraph() and
filter_ties.stocnet()mutate_nodes.stocnet(), mutate_ties.stocnet(),
filter_nodes.stocnet(), and
filter_ties.stocnet()bind_changes.igraph() and delegated ‘tbl_graph’
method to itto_correlation.matrix() S3 methodas_globallist() for extracting global variables
from ‘igraph’ and ‘stocnet’ objectsas_stocnet.data.frame() for coercing edgelists to
stocnet objects (closes #138)make_stocnet() construction, indexing, and
validation of nodes, ties, changes, info, and globalsas_stocnet() coercion for
data.frame and tbl_graph inputsmake_stocnet()
aborts early and informatively when node labels do not match (thanks
@auzaheta)add_tie_attribute()bind_nodes() for adding nodes and ties from
another networkarrange_changes() and
arrange_nodes() as generics for reordering nodes and ties
in a networkgather_changes() as a generic for gathering
changes up to a time pointrename_changes() for renaming change variables
and rename_globals() for renaming global variables
rename_*() methods to rename variables when no arguments
givenselect_ties(), select_changes(), and
select_globals() for selecting variables
select_*() methods to reorder variables when no arguments
givenfilter_nodes(), filter_ties(), and
filter_changes() as generics for filtering nodes, ties, and
changes in a networksummarise_ties() for summarising tie
variablesjoin_nodes.stocnet() for joining a nodelist to a
stocnet objectarrange_ties(),
bind_ties(), mutate_nodes(),
mutate_ties(), and rename_nodes()add_changes() to
bind_changes.tbl_graph()
bind_changes.stocnet() for binding on groups of
changes to a stocnet objectfrom_ties() to accept named arguments instead
of a named list, improving consistency with other modifying functions
from_ties.stocnet() for creating a multiplex
stocnet object from more than one network, including handling of tie
types as layers and carrying forward nodal attributesstocnet objects so ties and changes remain alignedjoin_nodes() for joining two nodelistsmutate_globals() for mutating global variables in
a networkto_*() default methods to coerce through
supported graph classes and then restore original classesto_subgraph()is_cognitive() for identifying cognitive social
structure networksis_egonet() for identifying egocentric
networksis_*() handling across stocnet,
igraph, and tbl_graph inputsis_*() methods to return logical
values reliably after coercionis_dynamic.stocnet() to look for more time-type
variablesnet_nodes(),
net_node_attributes(), and
net_tie_attributes() coverage for table and network-like
inputsnet_nodes.stocnet() and
net_dims.stocnet() to work with unlabelled networks|>), the {dplyr} R dependence anyway{netrics}run_tute(), extract_tute(), and
tutorial 0 to {migraph}{netrics}{autograph}, {learnr}, and
{netdiffuseR} from suggested dependenciescreate_ego() to collect_ego() to
better signal the different input structure expectedread_cran() and read_pkg() to
collect_cran() and collect_pkg() for
consistency with other collecting functionscreate_cycle() and
create_wheel() (undirected by default)generate_permutation() as no longer
necessaryplay_segregation() to be less verbosestocnet class for representing multilevel,
multiplex, multimodal, signed, dynamic, or longitudinal networks as a
structured list of tibbles and metadata
make_stocnet() for straightforward construction
of stocnet objectsvalidate_stocnet() for checking and suggesting
improvements to stocnet structureas_stocnet.igraph() for converting igraph objects
to stocnet, including converting tie types to layersvalue class to hold and print values of different
classes held in a list vectoras_matrix.igraph() for multiplex networksas_matrix.network() and
as_igraph.network() bugs related to inheriting integer
namesdiffnet coercion so that
{netdiffuseR} is no longer requiredcollect_changes() to
gather_changes()add_info() so that if no further arguments are
given it checks to see whether metadata may be added
add_info.stocnet() for adding metadata to
stocnet objectsmutate_net() to mutate_info() for
consistencynet_info() to as_infolist() for
claritynetwork method for
add_node_attribute()join_nodes() to work with unlabelled
networksto_ties.igraph() for unlabelled networksto_mode1() and to_mode2() to work
with unlabelled networksto_no_missing() rlang data pronoun issueto_tree() to use updated igraph function
namefrom_ties() to be quieter when joiningseq_nodes() and seq_ties() for
indexing network elements, exported for use in other packagesnet_modes() and net_layers() for
describing network structurenet_nodes.matrix() for extracting node count from
matrix objectsnet_node_attributes() and
net_tie_attributes() into generics with stocnet
methodsnet_node_names() and
net_tie_names() to mode_names() and
layer_names() respectively for consistency with
net_modes() and net_layers()
mode_names() and layer_names() to
look for older grand-nested variable names where necessarynet_nodes(),
net_dims(), net_ties(),
net_name(), mode_names(), and
layer_names()network method for net_name()is_egonet() to return correct value
(FALSE) for non-netlistsis_signed() to no longer expect integersdiff_model method for
is_changing()is_manynet() now recognises the stocnet
classstocnet methods for is_labelled(),
is_signed(), is_complex(),
is_multiplex(), is_changing(),
is_longitudinal(), is_dynamic(),
is_twomode(), and is_directed()stopifnot(is.scalar(ties)) in
generate_citations()generate_citations() to be clear that it
doesn’t yet work on two-mode networksdescribe_network() to include “network” as a
suffixnet_attributes() for returning the names of graph
attributesnet_info() for returning the list of graph
attributesnet_waves() to now return waves = 1 for
cross-sectional networksnode_is_isolate() to work with signed
networksnode_is_pendant() to work with signed
networks{renv} was
misinterpreting a hint as a package dependencyexpect_nodes() and expect_ties()
for use in other packagesnet_name() for obtaining network name if
availablenet_node_names() and net_tie_names()
for network element informationwrite_graphml() to coerce to igraph firstto_mode1() and to_mode2() to
carry forward nodal and tie attributes during projectionto_mode1() and to_mode2() to drop
unnecessary nodal informationto_uniplex() to handle multimodal multiplex
filtering correctly and retain tie type informationadd_changes() to work with tbl_graphfilter_nodes() to use
dplyr::all_of()interpolate() helper for injecting missing
datameasure_attributes documentation into separate
nodes and ties pagesnet_by_mixed() to work with multiplex
networksison_marvel_relationships and
ison_marvel_teams into single multiplex
fict_marvel datasetprint_all()delete_changes() for deleting all changes from a
changing networkto_waves() to work with networks that are
changing, longitudinal, or bothas_diffusion() to not trim off final wave in the
reportas_diffusion() to return correct E and R
compartments for waning diffusion modelsis_longitudinal() to only check for tie waves
and not nodal changesnet_diversity() and
node_diversity()
over_membership()net_diversity() and
node_diversity() to use and declare methods appropriate for
the vector of attributesnet_homophily() and node_homophily()
for measuring homophily according to different methods including
node_is_latent(),
node_is_infected(), node_is_recoverd() to work
with changing networksnode_is_exposed() to work with changing
networks and now accepts a time argumentto_directed() and
to_redirected() in the data tutorialgenerate_configuration() methods since igraph
>= v2.1.0 requiredgenerate_configuration() to use recent versions
of igraph::sample_degseq() correctlydescribe_*() functions for describing
networks, nodes, ties, and changesread_gdf() for importing GDF filesjoin_nodes() not recognising nodelists
correctlynode_randomwalk() closeness centralitynode_subgraph() centralityfict_actually to be a multiplex network
(thanks @korakotbua)read_pkg() for creating a network of the function
interdependencies within a packagemnet objects
node_coreness() where data wasn’t
recognised within pipesnode_in_core() for categorising nodes into 2+
core/periphery groupsnet_by_hierarchy() for characterising networks by
their graph theoretic dimensions of hierarchyison_emotionsirps_nuclear{autograph} to setups for all manynet
tutorials{autograph}run_tute() and extract_tute() to
search for {autograph}describe_changes() to work with time as well
as begin/end tie attributescreate_windmill()create_wheel()create_cycle()to_uniplex() test so that it doesn’t rely on
random samplingis_multiplex() to recognise more tie
attributesirps_nuclear_discourse for goldfish and various
testing of dynamic networksison_judo_moves for judo move sequences{ggplot2},
{ggraph}, {patchwork},
{ggdendro}, {concaveman},
{gifski}, {graphlayouts},
{ggforce}, and {BiocManager}to_no_missing() to record missing removalto_no_isolates() to record isolate
removalto_giant() to record giant component
scopingto_matching() to record matchingto_matching() triggering warnings from handling
NAs (thanks @schochastics for fixing #109)to_mentoring() to record mentoringto_eulerian() to record Eulerian pathingnet_core() with method options for calculating
correlation, distance, ndiff, and diffnode_coreness() to implement Borgatti and
Everett’s continuous coreness algorithmnode_coreness() to
node_kcoreness()graphr(), graphs(), and
grapht() to {autograph}{autograph}{autograph}{autograph}{autograph}-related functions
in examples to make package lighter{autograph} for continued development of
these featuresto_mode1() and to_mode2() to
record projection change{migraph})to_no_missing() for removing nodes with missing
dataas_diffusion.mnet() so that it includes
“diff_model” class{autograph})node_richness()
documentationnode_in_leiden() to use resolution parameter in
call to igraphtable_data() so that it lists components,
longitudinal, dynamic, and changing datafict_lotrirps_revere dataplay_learning()play_diffusion() for
e.g. SID modelscreate_ego()
snet_prompt() for easier to read consolessnet_minor_info() for reminding users to
assign the functionto_matching() to work on the more general
class of stable matching problems, including where nodes have different
capacitiesnode_is_universal()print.mnet() to print sections more prettily
and accommodate changes when presentprint_all() for printing infinite rowsplay_diffusions() to {migraph} (but
not play_diffusion())play_diffusion() to return an ‘mnet’ class
object with changes instead of a ‘diff_model’ object with hidden network
old_version = TRUEwrite_*() functions by printing picked
pathnames to the consoleas_changelist() for extracting changelists from
‘mnet’ objectsas_diffusion.mnet() for maintaining backward
compatibility for diffusion measuresas_tidygraph.networkDynamic() and
as_igraph.networkDynamic() for coercing ‘networkDynamic’
objects into ‘mnet’, ‘tidygraph’, and ‘igraph’ objectsadd_changes() for adding changes to a network,
including checks and imputing activity and susceptibilitymutate_changes() to mutate changesselect_changes() to select change variablesfilter_changes() to filter changescollect_changes() to collect changes up to a time
pointapply_changes() to apply collected changes to a
time pointto_time() for scoping a longitudinal network to a
time point, including nodal and/or tie changesselect_nodes() for selecting only some nodal
variablesmutate_net() for working with network
informationis_changing() for identifying networks with a
change componentnode_is_mean() for identifying typical nodesnode_is_*() diffusion marks to work with new
.data outputnet_strength() for measuring the number of ties
that would need to be removed from a network to increase its number of
componentsnet_toughness() for measuring the number of nodes
that would need to be removed from a network to increase its number of
componentsover_*() to {migraph}node_*() diffusion measures to work with new
.data outputnet_modularity() by informing users when a
bipartition is usednet_waves() for measuring the number of waves in
a networknet_hazard() to
net_by_hazard()node_by_*() diffusion motifs to work with new
.data outputfict_potter with composition changesison_starwars to fict_starwars,
updating it with composition changes and additional codingirps_911 network data on 9/11 hijackers and
associatesnode_in_community()tie_is_bridge() and node_bridges(){migraph} to help with
dependenciesto_waves() where result was unorderedgraphr() now uses categorical palettes (effectively
closing #60)net_correlation() for calculating the
product-moment correlation between networksto_simplex.data.frame() and
to_simplex.network()is_aperiodic() where it would not work in
tutorial chunksover_membership() for obtaining summary
statistics by a membership vectorcreate_ego(),
create_empty(), create_filled(),
create_ring(), create_star(),
create_lattice())as_matrix() handles signed networksas_nodelist() for extracting nodelists from
networks into tibblesto_cosine()to_galois() until it can be refactoredto_signed() for adding signs to networksto_weighted() for adding weights to networksgraphr() where line types were inferred
incorrectlygraphr() so that layouts can now be
snapped to a grid, mileage may varynode_is_pendant() for identifying pendant
nodesnode_is_neighbor() for identifying adjacent
nodestie_is_imbalanced() for identifying ties in
imbalanced configurationssummary.network_measure() to return z-scores and
p-values for measuresnode_vitality() for measuring closeness vitality
centralitynode_eigenvector()node_in_community() which runs through most
salient community detection algorithms to find and return the one with
the highest modularitynode_in_regular() to inform user which census
is being usednode_by_quad() to node_by_tetrad()
to be more consistent with Greek origins
summary.network_motif() which returns the
z-scores for the motif scores based on random or configurational
networks, traces progressplot.network_motif() where motif names
were not identified correctly, internal make_network_motif now inherits
call informationcluster_cosine() for another equivalence
optionrun_tute() fuzzy matched so that
insertions are not as costlygloss(), clear_glossary(), and
print_glossary() for adding glossaries to tutorialsirps_wwi, a dynamic, signed networkison_blogs to irps_blogs, added
infoison_books to irps_books, added
infoison_usstates to irps_usgeo, added
infoison_friends to fict_friends,
added info and fixed directed issueison_greys to fict_greys, added
infoison_lotr to fict_lotr, added
infoison_thrones to fict_thrones,
added info and some additional nodal attributesison_potter to fict_potter, added
info and combined waves into single object{concaveman}{ggdendro}thisRequires() bug by testing for
interactivityto_ego() and to_egos() to specify
directiongraphr() where user not informed about
{concaveman} dependencygraphr() examplesto_dominating() for extracting the dominating
tree of a given networkgraphr() to make function more concise and
consistent (thanks @henriquesposito)
node_eccentricity() to allow normalisation,
appear in closeness documentationnode_stress() as a new betweenness-like
centrality measurenode_leverage() as a new degree-like centrality
measureread_*() now print the command used to the console
if the (default) file.choose() is usedread_gml()node_power()ison_dolphinsison_booksison_blogsoptions(manynet_verbosity ="quiet")create_ego() for collecting ego networks through
interviews, including arguments for:
create_motifs() for creating networks that
correspond to the isomorphic subgraphs of certain size and formatprint.mnet()
add_info() for adding grand info to tidygraph
objects
to_unweighted() so that it passes through
unweighted networks correctlyset_manynet_theme() to set theme (re #60), but
not yet fully implementedis_multiplex() to ignore “name” tie
attributesnode_authority() and node_hub()
centrality measuresnode_equivalency() for calculating four-cycle
closure by nodenet_equivalency() to one-mode networksnode_in_equivalence() to use census directlycreate_motifs()node_by_dyad() for node level dyad censusnet_by_quad() for network level quad censusnode_by_quad() to avoid {oaqc}
dependency (#89), more flexible but slowerprint.node_motif() to convert to tibble and add
modes and names where available only upon print
ison_southern_women with grand infoison_laterals with reordered nodes{cli}suppressPackageStartupMessages()stop() replaced by
cli::cli_abort(){minMSE} dependency{roxygen2} dependency to Config/Needs/build{grDevices} and {png}
dependencies{network} reexportsrun_tute() and extract_tute() to
look for installed packages and report progressread_cran() for creating networks of package
dependencies on CRAN
{manynet})generate_man() for generating dyad census
conditional uniform graphsgenerate_islands() only takes a single integer and not a
vectoras_tidygraph() to add an additional class
‘mnet’ that is used for prettier printing
make_mnet() (internally) for future-proofingprint.tbl_graph() renamed to
print.mnet()print.mnet() uses ‘grand’ data if availablebind_ties() to be more flexible about the
input it accepts, converting all input into the required edgelistto_ego() for obtaining a single
neighbourhooddelete_nodes()
and delete_ties()add_ties() and
delete_ties() in documentationto_unnamed.igraph() when used with already
unlabelled networkstie_is_path() for tracing the ties on a
particular pathtie_is_triplet() for returning all the ties that
are members of transitive tripletstie_is_forbidden() for identifying ties in
forbidden triadstie_is_transitive() efficiency, now only
retrieves the edgelist onceis_aperiodic() to remove {minMSE}
dependency and offer a progress bar if it takes longer than 2
secondstie_is_triangular() to do with altpath
namingnode_distance() for measuring the distance from
or to particular nodesnode_degree() processed
isolates in calculating strength in weighted networksison_ data with new
as_tidygraph()ison_adolescents as a testison_thrones on kinship arcs between Game of
Thrones characters, with ‘grand’ dataison_monastery_ data into
ison_monks, a single multiplex, signed, weighted,
longitudinal networkcreate_degree() for creating networks of a given
degree sequence, including k-regular graphsgenerate_citations() for citation modelsgenerate_fire() for forest-fire modelsgenerate_islands() for island modelscreate_explicit() now has its own documentationtie_is_triangular() for identifying ties in
trianglestie_is_cyclical() for identifying ties in
cyclestie_is_transitive() for identifying ties involved
in transitive closuretie_is_simmelian() for identifying Simmelian
tiesgenerate_permutation() renamed to
to_permuted()graphr() plots edges in directed
networkstable_data() can now report on data from multiple
packages
{manynet} and {migraph} are included by
default, and if any are not installed they are just ignoredtable_data() can now filter by any reported formats,
such as ‘directed’ or ‘twomode’as_matrix.igraph() now only draws from the “weight”
attribute and not, e.g. “type”to_blocks() related to categorical
membership variablesmutate_ties()node_names() now returns names of the form “N01” etc
for unlabelled networksplot.matrix() works for unlabelled
networksgraphr()graphs() recognises ego networks so it is
compatible with other splitsgraphr()graphr()graphr()
functiongraphs() automatically uses “star” layout
to plot ego networksgraphr(),
graphs(), and grapht() also accept British
spellingsgraphs() and
grapht()to_subgraphs() no longer sampled{manynet} logo with stocnet GitHub address and
color blind safe colorway{minMse} dependencynetwork_*
prefix to net_* for conciseness{migraph}{migraph}create_core() where the membership
inferred when passing an existing network was incorrectgenerate_configuration() for generating
configuration models (including for two-mode networks)play_diffusion() now includes an explicit contact
argument to control the basis of exposurenode_is_*() functions now infer network data
contextnode_is_independent() for identifying nodes among
largest independent setsis_multiplex() now excludes reserved tie attribute
names other than type, such as “weight”, “sign”, or “wave”is_attributed() to check for non-name nodal
attributesnode_is_latent(),
node_is_recovered(), and node_is_infected()
(closes #71)is_twomode(),
is_labelled(), and is_complex()graphr(),
graphs(), and grapht()
(autographr(), autographs(), and
autographd() are now deprecated)scale_size(range = c(...,...)) to be usedscale_size() from
{ggplot2}graphr() now rescales node size depending on network
size (closes #51)to_named() now randomly generates and adds an
alphabetic sequence of names, where previously this was just a random
sample, which may assist pedagogical use
to_correlation() that implements pairwise
correlation on networkarrange_ties() for {dplyr}-like
reordering of ties based on some attributeto_correlation() for calculating the Pearson
correlation
as_diff_model() where events were out of
order and namedis_multiplex() now recognises “date”, “begin”, and
“end” as reserved{migraph}
node_degree(), node_deg(),
node_indegree(), node_outdegree(),
node_multidegree(), node_posneg(),
tie_degree(), net_degree(),
net_indegree(), and net_outdegree()node_betweenness(), node_induced(),
node_flow(), tie_betweenness(), and
net_betweenness()node_closeness(), node_reach(),
node_harmonic(), node_information(),
tie_closeness(), net_closeness(),
net_reach(), and net_harmonic()node_eigenvector(), node_power(),
node_alpha(), node_pagerank(),
tie_eigenvector(), and net_eigenvector()net_reciprocity(),
node_reciprocity(), net_transitivity(),
node_transitivity(), net_equivalency(), and
net_congruency()net_density(),
net_components(), net_cohesion(),net_adhesion(), net_diameter(),
net_length(), and net_independence()net_transmissibility(),
net_recovery(), net_reproduction(),
net_immunity(), net_hazard(),
net_infection_complete(),
net_infection_total(), net_infection_peak(),
node_adoption_time(), node_thresholds(),
node_recovery(), and node_exposure()net_richness(),
node_richness(), net_diversity(),
node_diversity(), net_heterophily(),
node_heterophily(), net_assortativity(), and
net_spatial()net_reciprocity(),
net_connectedness(), net_efficiency(), and
net_upperbound()node_bridges(),
node_redundancy(), node_effsize(),node_efficiency(), node_constraint(),
node_hierarchy(), node_eccentricity(),
node_neighbours_degree(), and
tie_cohesion()net_core(),
net_richclub(), net_factions(),
node_partition(), net_modularity(),
net_smallworld(), net_scalefree(),
net_balance(), net_change(), and
net_stability()node_mode() (deprecated) to
node_is_mode() since it returns a logical vectornode_attribute() and
tie_attribute() to return measures when the output is
numericnode_exposure() to work with two-mode and
signed networksnode_constraint() to work with weighted two-mode
networks, thanks to Toshitaka Izumi for spotting thismutate()
without specifying .datanet_independence() for calculating the number of
nodes in the largest independent setnode_coreness() now returns ‘node_measure’ outputnode_exposure() now sums tie weights where passed a
weighted network{migraph}
node_in_roulette() (previously
node_roulette())node_in_optimal(), node_in_partition()
(previously node_kernaghinlin()),
node_in_infomap(), node_in_spinglass(),
node_in_fluid(), node_in_louvain(),
node_in_leiden(), node_in_betweenness(),
node_in_greedy(), node_in_eigen(), and
node_in_walktrap()node_in_component(),
node_in_weak(), and node_in_strong() (NB:
node_in_component() is no longer phrased in the
plural)node_is_core() and
node_coreness()node_in_adopter()node_in_equivalence(),
node_in_structural(), node_in_regular(), and
node_in_automorphic()node_*(), but including the preposition _in_
is more consistent.node_member class is now categorical
make_node_member() now converts numeric results to
LETTER character resultsprint.node_member() now works with categorical
membership vectorsprint.node_member() now declares how many groups before
reporting the vectorsmutate() without specifying .data{migraph}, these include
node_by_tie(), node_by_triad(),
node_by_quad(), node_by_path(),
net_by_dyad(), net_by_triad(),
net_by_mixed(), node_by_brokerage(),
net_by_brokerage()
*_*_census(), but the preposition _by_ is more
consistent.node_tie_census() now works on longitudinal network
dataprint.node_motif() wasn’t printing the
requested number of lines{migraph}
cluster_hierarchical() and
cluster_concor()k_strict(),
k_elbow(), and k_silhouette()cluster_concor()
cluster_concor() now uses to_correlation()
for initial correlationstats::cor() for subsequent
iterationscluster_concor() handles unlabelled
networkscluster_concor() handles two-mode
networkscluster_concor() cutoff resulted in
unsplit groupscluster_hierarchical() now also uses
to_correlation()ison_greys dataset, including some corrections to
that published in {networkdata}ison_friends dataset to be explicitly
longitudinalison_usstates dataset with population data
(Alaska and Hawaii missing)ison_southern_women dataset with surnames,
titles, event dates, and corrected ties2024-03-15
to_scope() for CRAN
resubmission2024-03-13
autographr() examples that were
taking too long to runautographr(),
autographs(), and autographd() functionsautographr(),
autographs(), and autographd() functionsnode_is_infected(),
node_is_recovery(), node_is_latent() work for
network lists2024-03-12
play_diffusions() to revert
future plan on exitgenerate_random() works for two-mode
networks with specified number of tiesautographr() more flexible and
efficient in setting variables to aesthetics{ggplot2}to_reciprocated.matrix() to consistently work
with matrices2023-12-24
run_tute()2023-12-24
pkg_data() to report an overview of data
contained within the package(s){ggplot2}
releaseplay_diffusion() and
play_diffusions() from {migraph}
print(),
summary(), and plot() methodsplay_learning() and
play_segregation() from {migraph}
print(),
summary(), and plot() methodscreate_tree() where it was not returning a
two-mode network correctlyas_diffusion() to coerce a table of diffusion
events into diff_model class
as_*() functions are now considered modificationsmutate_nodes()filter_nodes()rename_nodes()bind_ties()delete_ties()to_tree() to find one or more spanning trees
amongst a network’s tiesfrom_ties() to collect multiple networks into a
multiplex networkis.igraph() to is_igraph() for
igraph v2.0.0is_list() for identifying a list of networksnode_is_core(),
node_is_cutpoint(), node_is_fold(),
node_is_isolate(), node_is_mentor() from
{migraph}node_is_exposed(),
node_is_infected(), node_is_latent(),
node_is_recovered() from {migraph}node_is_max(), node_is_min(),
node_is_random() from {migraph}tie_is_bridge(), tie_is_loop(),
tie_is_multiple(), tie_is_reciprocated() from
{migraph}tie_is_feedback()tie_is_max(), tie_is_min() from
{migraph}tie_is_random()scale_edge_color_centres(),
scale_edge_color_ethz(),
scale_edge_color_iheid(),
scale_edge_color_rug(),
scale_edge_color_sdgs()
autographr() now provides legends by default where
multiple colours are used (closes #52)autographs() now labels legends correctly for binary
variables (closes #38)autographs() now graphs just the first and last
networks in a list (closes #45)autographs() now includes an option whether the layout
should be based on the first, last, or both of two networks (closes
#48)ison_konigsberg to
ison_koenigsberg and named the bridgesison_algebra now in long multiplex formatison_karateka now weighted, anonymous members are named
by number, and “obc” variable renamed “allegiance”ison_lawfirm enlarged from 36 to 71 nodes and now
consists of three multiplex, directed networksison_southern_women names are now title caseison_hightech, a multiplex, directed network from
Krackhardt 1987ison_monastery datasets, three of which are
signed and weighted, and the other is longitudinal, from Sampson 1969
(closes #49)ison_potter datasets in a list of networks,
from Bossaert and Meidert 2013 (closes #47)ison_usstates data on the contiguity of US
states, from Meghanathan 20172023-12-17
as_tidygraph.diff_model() no longer creates names for
unlabelled networksto_waves.diff_model() now adds three logical vectors as
variables, “Infected”, “Exposed”, and “Recovered”
node_is_latent(),
node_is_infected(), and
node_is_recovered()autographr() now shapes seed, adopter, and non-adopter
nodes using a parallel to migraph’s node_adoption_time()
for
autographs() now colors susceptible, exposed, infected,
and recovered nodes correctlyautographd() now colors susceptible, exposed, infected,
and recovered nodes correctly2023-12-15
as_tidygraph() method for diff_model objectsas_siena() method for tidygraph objectsto_waves() now works on diff_model objects, add
attributes and namesis_multiplex() now recognises a tie/edge ‘type’
attribute as evidence of multiplexityigraph::is_bipartite() is superseded by
is_twomode()tidygraph::activate() is superseded by
mutate_ties() and similar functionsigraph::as_incidence_matrix() and
igraph::graph_from_incidence_matrix() with
igraph::as_biadjacency_matrix() and
igraph::graph_from_biadjacency_matrix()autographr() now plots diff_model objects, showing the
diffusion as a heatmap on the verticesautographs() and autographd() now utilise
network information in diff_model objects to provide better layouts
(closed #17)node_size in
autographd()many_palettes replaces iheid_palettetheme_ethz(),
scale_color_ethz()/scale_colour_ethz(), and
scale_fill_ethz() for ETH Zürichtheme_uzh(),
scale_color_uzh()/scale_colour_uzh(), and
scale_fill_uzh() for Uni Zürichtheme_rug(),
scale_color_rug()/scale_colour_rug(), and
scale_fill_rug() for Uni Gröningenison_physicians data that includes four,
multiplex networks with adoption data2023-12-06
run_tute()read_graphml() and write_graphml()
for importing and exporting graphml objects, mostly wrappers for igraph
functions.autographd() and autographs() can now be
used for plotting diffusion models.
to_waves() and autographd() to
account for ‘exposed’ nodes in diffusion models.hierarchical layout so that node name can be
specified for centering the layouttheme_heid() layoutison_starwars data, thanks
to coding by Yichen Shen and Tiphaine Aeby2023-11-15
run_tute()function to “fuzzy” match tutorial
names+.ggplot() method for visualising multiple plots
in the same panetheme_iheid for plotsscale_ family of functions for changing
colour scales in plotsautographr():
autographd() function2023-11-02
2023-11-01
as_igraph()
in accordance with upcoming updates to {igraph} package
(closing #27)to_mentoring functionautographr() related to
edge_size and edge_colorautographr()autographr()autographr()ison_friends, a one-mode network on character
connections of a popular TV series2023-10-25
generate examples leverage autographr()
againto_redirected.tbl_graph()print.tbl_graph() no longer mentions the object
classlayout_tbl_graph_concentric() now works with two-mode
networks, multiple levels for one-mode networks, and accepts new
vectorslayout_tbl_graph_multilevel() for laying out
multilevel networkslayout_tbl_graph_triad() and
layout_tbl_graph_quad() configurational layoutsison_starwars, a collection of seven weighted
interaction networks on a popular film franchiseison_networkers names are now in title case, not all
caps2023-10-19
run_tute() helper for quicker access to
{manynet} and {migraph} tutorialsextract_tute() for extracting the main code
examples from {manynet} and {migraph}
tutorialspurl = FALSE to tutorial chunks that are not
needed for extraction (thanks @JaelTan)run_tute() and
extract_tute()node_group and updated
documentation2023-10-11
{graphlayouts}, {ggforce}, and
{multiplex} to Suggestedto_galois() for transforming networks into
partially ordered Galois latticesautographr()autographr(),
closes #11autographr()autographr() now automatically bends arcs for
reciprocated ties when directed network is not too large/denseautographr() now accepts unquoted variables as
argumentsautographr() now uses
graphlayouts::layout_igraph_multilevel where
appropriateison_algebra now an anonymised network (again)2023-09-17
2023-09-17
{migraph} earlierison_lawfirm data from Lazega, see documentation
for more details2023-08-11
2023-08-11
thisRequiresBio() helper function
to download Bioconductor packagesison_konigsberg for illustrating Seven Bridges of
Konigsbergison_brandes2 and added potential modal type as
extra variable to ison_brandesison_bb, ison_bm,
ison_mb, and ison_mm into a list of networks
called ison_lateralscreate_explicit() for creating networks based on
explicit nodes and tiesdelete_nodes() for deleting specific nodesto_eulerian() function that returns a Eulerian
path network, if available, from a given networkis_ functions from
{migraph}
is_connected() to test if network is strongly
connectedis_perfect_matching() to test if there is a
matching for every node in the networkis_eulerian() to test whether there is a Eulerian
path for a networkis_acyclic to test whether network is a directed
acyclic graphis_aperiodic to test whether network is
aperiodiclayout_tbl_graph_alluvial() that places
successive layers horizontallylayout_tbl_graph_concentric()that places a
“hierarchy” layout around a circlelayout_tbl_graph_hierarchy() that layers the
nodes along the top and bottom sequenced to minimise overlaplayout_tbl_graph_ladder()that aligns nodes across
successive layers horizontallylayout_tbl_graph_railway that aligns nodes across
successive layers verticallytheme_iheid() function that themes graphs with
colors based on the Geneva Graduate Institute2023-06-20
{migraph}{migraph}2023-06-09
na_to_mean.data.frame()network_dims.network()2023-06-07
{migraph} package, adding the Make,
Manipulate, and Map functions to this package.dataprint.tbl_graph method that offers easy to
interpret informationread_*() functions,
e.g. read_edgelist()write_*() functions,
e.g. write_edgelist()
write_matrix() for exporting to matricescreate_*() functions,
e.g. create_lattice()
create_*() functions return tbl_graph
class objectsgenerate_*() functions,
e.g. generate_smallworld()ison_* network data,
e.g. ison_southern_womenas_*() functions, e.g. as_igraph()
as_edgelist.network()as_network.data.frame()as_network.tbl_graph()join_*() functions,
e.g. join_ties()add_*() functions,
e.g. add_node_attribute()
create_*() functions return tbl_graph
class objectsmutate_*() functions,
e.g. mutate_ties()
mutate_ties(), it is no longer necessary to
activate(edges)rename_*() functions,
e.g. rename_ties()is_*() functions, e.g. is_dynamic()
is_labelled() to work correctly with multiple
network formatsto_*() functions, e.g. to_mode1()
to_giant.network()to_directed() now a methodto_subgraphs() now returns a list of
tbl_graphsto_reciprocated() now works on edgelists, matrices,
tbl_graphs, and networksto_acylic() now works on matrices, tbl_graphs, and
networksfrom_*() functions, e.g. from_egos()
from_subgraphs()network_nodes()
network_dims() is now a methodautographr(), autographs(), and
autographd()layout_tbl_graph_concentric()