Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions R/measure_features.R
Original file line number Diff line number Diff line change
Expand Up @@ -150,6 +150,7 @@ net_by_richclub <- function(.data){
net_by_factions <- function(.data,
membership = NULL){
.data <- manynet::expect_nodes(.data)
membership <- .resolve_membership(.data, membership)
if(is.null(membership)){
manynet::snet_info("No membership vector assigned.",
"Partitioning the network using {.fn node_in_partition}.")
Expand Down Expand Up @@ -207,6 +208,7 @@ net_by_modularity <- function(.data,
membership = NULL,
resolution = 1){
.data <- manynet::expect_nodes(.data)
membership <- .resolve_membership(.data, membership)
if(is.null(membership)){
manynet::snet_info("Since no membership argument has been provided,",
"a partition of the network into two will be calculated and used.")
Expand Down
20 changes: 12 additions & 8 deletions R/motif_brokerage.R
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,16 @@ NULL
node_x_brokerage <- function(.data, membership, standardized = FALSE){
thisRequires("sna")
.data <- manynet::expect_nodes(.data)
membership <- .resolve_membership(.data, membership)
if(!manynet::is_twomode(.data)){
out <- sna::brokerage(manynet::as_network(.data),
manynet::node_attribute(.data, membership))
membership)
out <- if(standardized) out$z.nli else out$raw.nli
colnames(out) <- c("Coordinator", "Itinerant", "Gatekeeper",
"Representative", "Liaison", "Total")
} else {
out <- suppressWarnings(sna::brokerage(manynet::as_network(manynet::to_mode1(.data)),
manynet::node_attribute(.data, membership)))
membership))
out <- if(standardized) out$z.nli else out$raw.nli
out <- out[,-4]
colnames(out) <- c("Coordinator", "Itinerant", "Gatekeeper",
Expand Down Expand Up @@ -72,15 +73,16 @@ NULL
net_x_brokerage <- function(.data, membership, standardized = FALSE){
thisRequires("sna")
.data <- manynet::expect_nodes(.data)
membership <- .resolve_membership(.data, membership)
if(!manynet::is_twomode(.data)){
out <- sna::brokerage(manynet::as_network(.data),
manynet::node_attribute(.data, membership))
membership)
out <- if(standardized) out$z.gli else out$raw.gli
names(out) <- c("Coordinator", "Itinerant", "Gatekeeper",
"Representative", "Liaison", "Total")
} else {
out <- suppressWarnings(sna::brokerage(manynet::as_network(manynet::to_mode1(.data)),
manynet::node_attribute(.data, membership)))
membership))
out <- if(standardized) out$z.gli else out$raw.gli
names(out) <- c("Coordinator", "Itinerant", "Gatekeeper",
"Representative", "Liaison", "Total")
Expand Down Expand Up @@ -118,10 +120,11 @@ node_by_brokering_activity <- function(.data, membership){
.data <- manynet::expect_nodes(.data)
twopaths <- .to_twopaths(.data)
if(!missing(membership)){
twopaths$from_memb <- manynet::node_attribute(.data, membership)[`if`(manynet::is_labelled(.data),
membership <- .resolve_membership(.data, membership)
twopaths$from_memb <- membership[`if`(manynet::is_labelled(.data),
match(twopaths$from, manynet::node_names(.data)),
twopaths$from)]
twopaths$to_memb <- manynet::node_attribute(.data, membership)[`if`(manynet::is_labelled(.data),
twopaths$to_memb <- membership[`if`(manynet::is_labelled(.data),
match(twopaths$to.y, manynet::node_names(.data)),
twopaths$to.y)]
twopaths <- dplyr::filter(twopaths, from_memb != to_memb)
Expand All @@ -147,10 +150,11 @@ node_by_brokering_exclusivity <- function(.data, membership){
.data <- manynet::expect_nodes(.data)
twopaths <- .to_twopaths(.data)
if(!missing(membership)){
twopaths$from_memb <- manynet::node_attribute(.data, membership)[`if`(manynet::is_labelled(.data),
membership <- .resolve_membership(.data, membership)
twopaths$from_memb <- membership[`if`(manynet::is_labelled(.data),
match(twopaths$from, manynet::node_names(.data)),
twopaths$from)]
twopaths$to_memb <- manynet::node_attribute(.data, membership)[`if`(manynet::is_labelled(.data),
twopaths$to_memb <- membership[`if`(manynet::is_labelled(.data),
match(twopaths$to.y, manynet::node_names(.data)),
twopaths$to.y)]
twopaths <- dplyr::filter(twopaths, from_memb != to_memb)
Expand Down
12 changes: 12 additions & 0 deletions R/netrics-utils.R
Original file line number Diff line number Diff line change
Expand Up @@ -40,4 +40,16 @@ seq_nodes <- function(.data){
seq.int(manynet::net_nodes(.data))
}

# Resolve membership to a vector:
# if a single character string naming a network attribute is provided,
# retrieve that attribute as a vector; otherwise return the value as-is.
.resolve_membership <- function(.data, membership) {
if (is.character(membership) && length(membership) == 1 &&
membership %in% manynet::node_attribute_names(.data)) {
manynet::node_attribute(.data, membership)
} else {
membership
}
}

# nocov end
9 changes: 5 additions & 4 deletions man-roxygen/param_memb.R
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#' @param membership A character vector of categorical membership.
#' This is a vector of the same length as the number of nodes in the network,
#' where each element is a character string indicating the membership of the corresponding node.
#' While this may often be a vector created using `node_in_*()` functions,
#' @param membership A character string naming an existing node attribute in
#' the network, or a categorical vector of the same length as the number of
#' nodes in the network where each element indicates the group membership of
#' the corresponding node.
#' While this may often be a vector created using `node_in_*()` functions,
#' it can be any character vector that assigns nodes to groups or categories.