From 8053d262f4710c0d74975cd9367ff1a8cd7306a5 Mon Sep 17 00:00:00 2001 From: James Hollway Date: Tue, 5 Nov 2024 09:41:52 +0100 Subject: [PATCH 1/6] Improved speed of make_network_measure by retrieving single call at parent level --- R/class_measures.R | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/R/class_measures.R b/R/class_measures.R index eef7e93b..ce5e0193 100644 --- a/R/class_measures.R +++ b/R/class_measures.R @@ -21,10 +21,10 @@ make_tie_measure <- function(out, .data) { out } -make_network_measure <- function(out, .data) { +make_network_measure <- function(out, .data, call) { class(out) <- c("network_measure", class(out)) attr(out, "mode") <- net_dims(.data) - attr(out, "call") <- deparse(sys.calls()) + attr(out, "call") <- call out } @@ -107,13 +107,18 @@ summary.network_measure <- function(object, ..., null = c("random","configuration"), times = 500) { null <- paste0("generate_", match.arg(null)) - callItems <- trimws(strsplit(unlist(attr(object, "call")), + callItems <- trimws(strsplit(attr(object, "call"), split = "\\(|\\)|,")[[1]]) idFun <- which(grepl("^net_", callItems))[1] fun <- callItems[idFun] dat <- callItems[idFun+1] + if(length(callItems)>2) oth <- callItems[3:length(callItems)] else + oth <- NULL nulls <- vapply(mnet_progress_seq(times), function(r){ - suppressMessages(get(fun)(get(null)(get(dat)))) + if(is.null(oth)) + suppressMessages(get(fun)(get(null)(get(dat)))) else + suppressMessages(get(fun)(get(null)(get(dat)), + gsub("\"", "", oth))) }, FUN.VALUE = numeric(1)) out <- (object - mean(nulls))/stats::sd(nulls) out[is.nan(out)] <- 0 From 4bb5a5041ef080ad3ee671dde27f2e48b07cc832 Mon Sep 17 00:00:00 2001 From: James Hollway Date: Tue, 5 Nov 2024 09:42:11 +0100 Subject: [PATCH 2/6] Made network measures all retrieve calls at parent level --- R/measure_centrality.R | 8 ++++---- R/measure_closure.R | 10 +++++----- R/measure_cohesion.R | 16 +++++++++------- R/measure_features.R | 11 ++++++----- R/measure_heterogeneity.R | 8 ++++---- R/measure_properties.R | 8 +++++--- 6 files changed, 33 insertions(+), 28 deletions(-) diff --git a/R/measure_centrality.R b/R/measure_centrality.R index 1627b5cc..cd7dfd15 100644 --- a/R/measure_centrality.R +++ b/R/measure_centrality.R @@ -254,7 +254,7 @@ net_degree <- function(.data, normalized = TRUE, out <- igraph::centr_degree(graph = .data, mode = direction, normalized = normalized)$centralization } - out <- make_network_measure(out, .data) + out <- make_network_measure(out, .data, call = deparse(sys.call())) out } @@ -501,7 +501,7 @@ net_betweenness <- function(.data, normalized = TRUE, } else { out <- igraph::centr_betw(graph = graph)$centralization } - out <- make_network_measure(out, .data) + out <- make_network_measure(out, .data, call = deparse(sys.call())) out } @@ -846,7 +846,7 @@ net_closeness <- function(.data, normalized = TRUE, mode = direction, normalized = normalized)$centralization } - out <- make_network_measure(out, .data) + out <- make_network_measure(out, .data, call = deparse(sys.call())) out } @@ -1125,7 +1125,7 @@ net_eigenvector <- function(.data, normalized = TRUE){ out <- igraph::centr_eigen(manynet::as_igraph(.data), normalized = normalized)$centralization } - out <- make_network_measure(out, .data) + out <- make_network_measure(out, .data, call = deparse(sys.call())) out } diff --git a/R/measure_closure.R b/R/measure_closure.R index 1e7f2ccf..c01752f0 100644 --- a/R/measure_closure.R +++ b/R/measure_closure.R @@ -38,7 +38,7 @@ NULL net_reciprocity <- function(.data, method = "default") { if(missing(.data)) {expect_nodes(); .data <- .G()} make_network_measure(igraph::reciprocity(manynet::as_igraph(.data), mode = method), - .data) + .data, call = deparse(sys.call())) } #' @rdname measure_closure @@ -60,7 +60,7 @@ node_reciprocity <- function(.data) { net_transitivity <- function(.data) { if(missing(.data)) {expect_nodes(); .data <- .G()} make_network_measure(igraph::transitivity(manynet::as_igraph(.data)), - .data) + .data, call = deparse(sys.call())) } #' @rdname measure_closure @@ -103,7 +103,7 @@ net_equivalency <- function(.data) { if (is.nan(out)) out <- 1 if(manynet::is_weighted(.data)) out <- out / mean(mat[mat>0]) } else { - out <- rowSums(vapply(cli::cli_progress_along(1:net_nodes(.data)), function(i){ + out <- rowSums(vapply(mnet_progress_nodes(.data), function(i){ threepaths <- igraph::all_simple_paths(.data, i, cutoff = 3, mode = "all") onepaths <- threepaths[vapply(threepaths, length, @@ -115,7 +115,7 @@ net_equivalency <- function(.data) { }, FUN.VALUE = numeric(2))) out <- out[1]/out[2] } - make_network_measure(out, .data) + make_network_measure(out, .data, call = deparse(sys.call())) } #' @rdname measure_closure @@ -171,5 +171,5 @@ net_congruency <- function(.data, object2){ sum(twopaths * (matrix(degrees, connects, connects) - twopaths))) if (is.nan(output)) output <- 1 - make_network_measure(output, .data) + make_network_measure(output, .data, call = deparse(sys.call())) } diff --git a/R/measure_cohesion.R b/R/measure_cohesion.R index 0ec88936..c4094fcd 100644 --- a/R/measure_cohesion.R +++ b/R/measure_cohesion.R @@ -36,7 +36,7 @@ net_density <- function(.data) { } else { out <- igraph::edge_density(manynet::as_igraph(.data)) } - make_network_measure(out, .data) + make_network_measure(out, .data, call = deparse(sys.call())) } #' @rdname measure_cohesion @@ -52,7 +52,7 @@ net_components <- function(.data){ if(missing(.data)) {expect_nodes(); .data <- .G()} object <- manynet::as_igraph(.data) make_network_measure(igraph::components(object, mode = "strong")$no, - object) + object, call = deparse(sys.call())) } #' @rdname measure_cohesion @@ -69,7 +69,8 @@ net_components <- function(.data){ #' @export net_cohesion <- function(.data){ if(missing(.data)) {expect_nodes(); .data <- .G()} - make_network_measure(igraph::cohesion(manynet::as_igraph(.data)), .data) + make_network_measure(igraph::cohesion(manynet::as_igraph(.data)), + .data, call = deparse(sys.call())) } #' @rdname measure_cohesion @@ -80,7 +81,8 @@ net_cohesion <- function(.data){ #' @export net_adhesion <- function(.data){ if(missing(.data)) {expect_nodes(); .data <- .G()} - make_network_measure(igraph::adhesion(manynet::as_igraph(.data)), .data) + make_network_measure(igraph::adhesion(manynet::as_igraph(.data)), + .data, call = deparse(sys.call())) } #' @rdname measure_cohesion @@ -94,7 +96,7 @@ net_diameter <- function(.data){ object <- manynet::as_igraph(.data) make_network_measure(igraph::diameter(object, directed = manynet::is_directed(object)), - object) + object, call = deparse(sys.call())) } #' @rdname measure_cohesion @@ -108,7 +110,7 @@ net_length <- function(.data){ object <- manynet::as_igraph(.data) make_network_measure(igraph::mean_distance(object, directed = manynet::is_directed(object)), - object) + object, call = deparse(sys.call())) } #' @rdname measure_cohesion @@ -123,5 +125,5 @@ net_independence <- function(.data){ } else { out <- igraph::ivs_size(manynet::to_undirected(manynet::as_igraph(.data))) } - make_network_measure(out, .data) + make_network_measure(out, .data, call = deparse(sys.call())) } diff --git a/R/measure_features.R b/R/measure_features.R index b07fcd9c..75b5d746 100644 --- a/R/measure_features.R +++ b/R/measure_features.R @@ -49,7 +49,7 @@ net_core <- function(.data, if(is.null(mark)) mark <- node_is_core(.data) out <- stats::cor(c(as_matrix(.data)), c(as_matrix(create_core(.data, mark = mark)))) - make_network_measure(out, .data) + make_network_measure(out, .data, call = deparse(sys.call())) } #' @rdname measure_features @@ -118,7 +118,7 @@ net_factions <- function(.data, out <- stats::cor(c(manynet::as_matrix(.data)), c(manynet::as_matrix(manynet::create_components(.data, membership = membership)))) - make_network_measure(out, .data) + make_network_measure(out, .data, call = deparse(sys.call())) } #' @rdname measure_features @@ -174,11 +174,12 @@ net_modularity <- function(.data, if(is_twomode(.data)){ make_network_measure(igraph::modularity(to_multilevel(.data), membership = membership, - resolution = resolution), .data) + resolution = resolution), + .data, call = deparse(sys.call())) } else make_network_measure(igraph::modularity(.data, membership = membership, resolution = resolution), - .data) + .data, call = deparse(sys.call())) } #' @rdname measure_features @@ -264,7 +265,7 @@ net_smallworld <- function(.data, "sigma" = (co/cr)/(lo/lr), "SWI" = ((lo - ll)/(lr - ll))*((co - cr)/(cl - cr))) make_network_measure(out, - .data) + .data, call = deparse(sys.call())) } #' @rdname measure_features diff --git a/R/measure_heterogeneity.R b/R/measure_heterogeneity.R index e2af62dc..a8f79e63 100644 --- a/R/measure_heterogeneity.R +++ b/R/measure_heterogeneity.R @@ -36,7 +36,7 @@ NULL net_richness <- function(.data, attribute){ if(missing(.data)) {expect_nodes(); .data <- .G()} make_network_measure(length(unique(manynet::node_attribute(.data, attribute))), - .data) + .data, call = deparse(sys.call())) } #' @rdname measure_heterogeneity @@ -96,7 +96,7 @@ net_diversity <- function(.data, attribute, clusters = NULL){ names(blauout) <- paste0("Cluster ", unique(clu)) blauout <- blauout[order(names(blauout))] } else cli::cli_abort("`clusters` must be the name of a nodal variable in the object.") - make_network_measure(blauout, .data) + make_network_measure(blauout, .data, call = deparse(sys.call())) } #' @rdname measure_heterogeneity @@ -151,7 +151,7 @@ net_heterophily <- function(.data, attribute){ nInternal <- sum(m * same, na.rm = TRUE) nExternal <- sum(m, na.rm = TRUE) - nInternal ei <- (nExternal - nInternal) / sum(m, na.rm = TRUE) - make_network_measure(ei, .data) + make_network_measure(ei, .data, call = deparse(sys.call())) } #' @rdname measure_heterogeneity @@ -195,7 +195,7 @@ net_assortativity <- function(.data){ if(missing(.data)) {expect_nodes(); .data <- .G()} make_network_measure(igraph::assortativity_degree(manynet::as_igraph(.data), directed = manynet::is_directed(.data)), - .data) + .data, call = deparse(sys.call())) } #' @rdname measure_heterogeneity diff --git a/R/measure_properties.R b/R/measure_properties.R index d33b14f3..733f35d7 100644 --- a/R/measure_properties.R +++ b/R/measure_properties.R @@ -31,8 +31,9 @@ net_nodes <- function(.data){ if(is_list(.data)){ nodes <- vapply(.data, function(x) igraph::vcount(as_igraph(x)), FUN.VALUE = numeric(1)) - make_network_measure(max(nodes), .data[[1]]) - } else make_network_measure(igraph::vcount(as_igraph(.data)), .data) + make_network_measure(max(nodes), .data[[1]], call = deparse(sys.call())) + } else make_network_measure(igraph::vcount(as_igraph(.data)), .data, + call = deparse(sys.call())) } #' @rdname measure_properties @@ -40,7 +41,8 @@ net_nodes <- function(.data){ #' net_ties(ison_southern_women) #' @export net_ties <- function(.data){ - make_network_measure(igraph::ecount(as_igraph(.data)), .data) + make_network_measure(igraph::ecount(as_igraph(.data)), .data, + call = deparse(sys.call())) } #' @rdname measure_properties From 14343b7a2870c1fc7c6b550a4f3b2650807e331f Mon Sep 17 00:00:00 2001 From: James Hollway Date: Tue, 5 Nov 2024 18:00:25 +0100 Subject: [PATCH 3/6] Added net_correlation() --- NAMESPACE | 1 + R/measure_features.R | 19 ++++++++++++++++++- man/measure_periods.Rd | 4 ++++ 3 files changed, 23 insertions(+), 1 deletion(-) diff --git a/NAMESPACE b/NAMESPACE index 760a6799..13b9f2bd 100644 --- a/NAMESPACE +++ b/NAMESPACE @@ -442,6 +442,7 @@ export(net_components) export(net_congruency) export(net_connectedness) export(net_core) +export(net_correlation) export(net_degree) export(net_density) export(net_diameter) diff --git a/R/measure_features.R b/R/measure_features.R index 75b5d746..e0d54f7e 100644 --- a/R/measure_features.R +++ b/R/measure_features.R @@ -100,7 +100,7 @@ net_richclub <- function(.data){ coefs[is.nan(coefs)] <- 1 out <- coefs[elbow_finder(seq_along(coefs), coefs)] # max(coefs, na.rm = TRUE) - make_network_measure(out, .data) + make_network_measure(out, .data, call = deparse(sys.call())) } #' @rdname measure_features @@ -393,6 +393,7 @@ net_balance <- function(.data) { #' #' - `net_change()` measures the Hamming distance between two or more networks. #' - `net_stability()` measures the Jaccard index of stability between two or more networks. +#' - `net_correlation()` measures the product-moment correlation between two networks. #' #' These `net_*()` functions return a numeric vector the length of the number #' of networks minus one. E.g., the periods between waves. @@ -437,4 +438,20 @@ net_stability <- function(.data, object2){ n10 <- sum(net1 * net2==0) n11 / (n01 + n10 + n11) }, FUN.VALUE = numeric(1)) +} + +#' @rdname measure_periods +#' @export +net_correlation <- function(.data, object2){ + if(missing(.data)) {expect_nodes(); .data <- .G()} + comp1 <- as_matrix(.data) + comp2 <- as_matrix(object2) + if(!is_complex(.data)){ + diag(comp1) <- NA + } + if(!is_directed(.data)){ + comp1[upper.tri(comp1)] <- NA + } + out <- cor(c(comp1), c(comp2), use = "complete.obs") + make_network_measure(out, .data, call = deparse(sys.call())) } \ No newline at end of file diff --git a/man/measure_periods.Rd b/man/measure_periods.Rd index 70d33cd3..ea6879fe 100644 --- a/man/measure_periods.Rd +++ b/man/measure_periods.Rd @@ -4,11 +4,14 @@ \alias{measure_periods} \alias{net_change} \alias{net_stability} +\alias{net_correlation} \title{Measures of network change} \usage{ net_change(.data, object2) net_stability(.data, object2) + +net_correlation(.data, object2) } \arguments{ \item{.data}{An object of a manynet-consistent class: @@ -27,6 +30,7 @@ These functions measure certain topological features of networks: \itemize{ \item \code{net_change()} measures the Hamming distance between two or more networks. \item \code{net_stability()} measures the Jaccard index of stability between two or more networks. +\item \code{net_correlation()} measures the product-moment correlation between two networks. } These \verb{net_*()} functions return a numeric vector the length of the number From 7ef070c11652c767abbf451cba5a1321e398c29c Mon Sep 17 00:00:00 2001 From: James Hollway Date: Tue, 5 Nov 2024 18:43:06 +0100 Subject: [PATCH 4/6] mnet_progress only when interactive() --- R/zzz.R | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/R/zzz.R b/R/zzz.R index 6624b965..ece4c002 100644 --- a/R/zzz.R +++ b/R/zzz.R @@ -67,9 +67,10 @@ mnet_progress_seq <- function(..., .envir = parent.frame()){ } mnet_progress_nodes <- function(..., .envir = parent.frame()){ - if(getOption("manynet_verbosity", default = "quiet")!="quiet") + if(getOption("manynet_verbosity", default = "quiet")!="quiet" && interactive()){ cli::cli_progress_along(seq.int(net_nodes(...)), .envir = .envir, total = ..., clear = TRUE) + } else seq.int(net_nodes(...)) } mnet_info <- function(..., .envir = parent.frame()){ From 1fb188f9d9c3710165ab873115e80a4dda7ca9b6 Mon Sep 17 00:00:00 2001 From: James Hollway Date: Tue, 5 Nov 2024 18:49:56 +0100 Subject: [PATCH 5/6] Updated all network measures --- R/measure_diffusion.R | 24 ++++++++++++++++-------- R/measure_features.R | 6 ++++-- R/measure_heterogeneity.R | 3 ++- R/measure_hierarchy.R | 9 ++++++--- 4 files changed, 28 insertions(+), 14 deletions(-) diff --git a/R/measure_diffusion.R b/R/measure_diffusion.R index 912ac99b..a371726d 100644 --- a/R/measure_diffusion.R +++ b/R/measure_diffusion.R @@ -59,7 +59,8 @@ net_transmissibility <- function(diff_model){ out <- out[!is.infinite(out)] out <- out[!is.nan(out)] make_network_measure(mean(out, na.rm = TRUE), - attr(diff_model, "network")) + attr(diff_model, "network"), + call = deparse(sys.call())) } #' @rdname measure_diffusion_net @@ -84,7 +85,8 @@ net_recovery <- function(diff_model, censor = TRUE){ if(censor && any(!is.infinite(recovs) & !is.na(recovs))) recovs[is.infinite(recovs)] <- nrow(diff_model) make_network_measure(mean(recovs, na.rm = TRUE), - attr(diff_model, "network")) + attr(diff_model, "network"), + call = deparse(sys.call())) } #' @rdname measure_diffusion_net @@ -129,7 +131,8 @@ net_reproduction <- function(diff_model){ out <- net_transmissibility(diff_model)/ (1/net_recovery(diff_model)) out <- min(out, mean(node_deg(net))) - make_network_measure(out, net) + make_network_measure(out, net, + call = deparse(sys.call())) } #' @rdname measure_diffusion_net @@ -171,7 +174,8 @@ net_immunity <- function(diff_model, normalized = TRUE){ net <- attr(diff_model, "network") out <- 1 - 1/net_reproduction(diff_model) if(!normalized) out <- ceiling(out * net_nodes(net)) - make_network_measure(out, net) + make_network_measure(out, net, + call = deparse(sys.call())) } #' @rdname measure_diffusion_net @@ -233,7 +237,8 @@ net_hazard <- function(diff_model){ diff_model <- as_diffusion(diff_model) out <- (diff_model$I - dplyr::lag(diff_model$I)) / (diff_model$n - dplyr::lag(diff_model$I)) - make_network_measure(out, attr(diff_model, "network")) + make_network_measure(out, attr(diff_model, "network"), + call = deparse(sys.call())) } # net_infection #### @@ -270,7 +275,8 @@ net_infection_complete <- function(diff_model){ diff_model <- as_diffusion(diff_model) out <- which(diff_model$I == diff_model$n)[1] if(is.na(out)) out <- Inf - make_network_measure(out, attr(diff_model, "network")) + make_network_measure(out, attr(diff_model, "network"), + call = deparse(sys.call())) } #' @rdname measure_diffusion_infection @@ -281,7 +287,8 @@ net_infection_total <- function(diff_model, normalized = TRUE){ diff_model <- as_diffusion(diff_model) out <- sum(diff_model$I_new) if(normalized) out <- out / diff_model$n[length(diff_model$n)] - make_network_measure(out, attr(diff_model, "network")) + make_network_measure(out, attr(diff_model, "network"), + call = deparse(sys.call())) } #' @rdname measure_diffusion_infection @@ -291,7 +298,8 @@ net_infection_total <- function(diff_model, normalized = TRUE){ net_infection_peak <- function(diff_model){ diff_model <- as_diffusion(diff_model) out <- which(diff_model$I_new == max(diff_model$I_new))[1] - make_network_measure(out, attr(diff_model, "network")) + make_network_measure(out, attr(diff_model, "network"), + call = deparse(sys.call())) } # node_diffusion #### diff --git a/R/measure_features.R b/R/measure_features.R index e0d54f7e..40488e22 100644 --- a/R/measure_features.R +++ b/R/measure_features.R @@ -305,7 +305,8 @@ net_scalefree <- function(.data){ "could have been drawn from a power-law", "distribution rejected.\n")) } - make_network_measure(out$alpha, .data) + make_network_measure(out$alpha, .data, + call = deparse(sys.call())) } #' @rdname measure_features @@ -381,7 +382,8 @@ net_balance <- function(.data) { } tria_count <- count_signed_triangles(g) make_network_measure(unname((tria_count["+++"] + tria_count["+--"])/sum(tria_count)), - .data) + .data, + call = deparse(sys.call())) } diff --git a/R/measure_heterogeneity.R b/R/measure_heterogeneity.R index a8f79e63..4af25099 100644 --- a/R/measure_heterogeneity.R +++ b/R/measure_heterogeneity.R @@ -219,5 +219,6 @@ net_spatial <- function(.data, attribute){ I <- (N/W) * (sum(w * matrix(x - x_bar, N, N) * matrix(x - x_bar, N, N, byrow = TRUE)) / sum((x - x_bar)^2)) - make_network_measure(I, .data) + make_network_measure(I, .data, + call = deparse(sys.call())) } diff --git a/R/measure_hierarchy.R b/R/measure_hierarchy.R index e8385bc9..2856ff06 100644 --- a/R/measure_hierarchy.R +++ b/R/measure_hierarchy.R @@ -37,7 +37,8 @@ net_connectedness <- function(.data){ if(missing(.data)) {expect_nodes(); .data <- .G()} dists <- igraph::distances(as_igraph(.data)) make_network_measure(1 - sum(dists==Inf)/sum(dists!=0), - .data) + .data, + call = deparse(sys.call())) } #' @rdname measure_hierarchy @@ -46,7 +47,8 @@ net_efficiency <- function(.data) { if(missing(.data)) {expect_nodes(); .data <- .G()} degs <- node_indegree(.data, normalized = FALSE) out <- (net_nodes(.data)-1)/sum(degs) - make_network_measure(out, .data) + make_network_measure(out, .data, + call = deparse(sys.call())) } #' @rdname measure_hierarchy @@ -66,5 +68,6 @@ net_upperbound <- function(.data) { }) out <- sum(out)/length(out) } - make_network_measure(out, .data) + make_network_measure(out, .data, + call = deparse(sys.call())) } \ No newline at end of file From dd9a25facb8be3b39ab069e2993cd881424e6225 Mon Sep 17 00:00:00 2001 From: James Hollway Date: Tue, 5 Nov 2024 18:50:25 +0100 Subject: [PATCH 6/6] #patch bump --- DESCRIPTION | 4 ++-- NEWS.md | 7 +++++++ cran-comments.md | 6 ++---- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/DESCRIPTION b/DESCRIPTION index 1f914694..5ab1987a 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: manynet Title: Many Ways to Make, Modify, Map, Mark, and Measure Myriad Networks -Version: 1.3.1 -Date: 2024-10-29 +Version: 1.3.2 +Date: 2024-11-05 Description: Many tools for making, modifying, mapping, marking, measuring, and motifs and memberships of many different types of networks. All functions operate with matrices, edge lists, and 'igraph', 'network', and 'tidygraph' objects, diff --git a/NEWS.md b/NEWS.md index a578f0da..628e13c0 100644 --- a/NEWS.md +++ b/NEWS.md @@ -1,3 +1,10 @@ +# manynet 1.3.2 + +## Measuring + +- Added `net_correlation()` for calculating the product-moment correlation between networks +- Improved speed of make_network_measure by retrieving single call at parent level + # manynet 1.3.1 ## Package diff --git a/cran-comments.md b/cran-comments.md index 552540be..dfb97958 100644 --- a/cran-comments.md +++ b/cran-comments.md @@ -1,6 +1,6 @@ ## Test environments -* local R installation, aarch64-apple-darwin20, R 4.4.1 +* local R installation, aarch64-apple-darwin20, R 4.4.2 * macOS 14.5 (on Github), R 4.4.1 * Microsoft Windows Server 2022 10.0.20348 (on Github), R 4.4.1 * Ubuntu 22.04.4 (on Github), R 4.4.1 @@ -9,6 +9,4 @@ 0 errors | 0 warnings | 0 notes -* Attempted to fix non ASCII strings warning -* Changes to avoid reverse dependency issues for igraph -* Changes to avoid long runtimes for one example on some systems \ No newline at end of file +* Fixed speed issues in migraph \ No newline at end of file