test_that("as_directed works", {
gnp_undirected <- sample_gnp(100, 2 / 100)
gnp_mutual <- as_directed(gnp_undirected, mode = "mutual")
expect_equal(degree(gnp_undirected), degree(gnp_mutual) / 2)
expect_isomorphic(gnp_undirected, as_undirected(gnp_mutual))
gnp_arbitrary <- as_directed(gnp_undirected, mode = "arbitrary")
expect_equal(degree(gnp_undirected), degree(gnp_arbitrary))
expect_isomorphic(gnp_undirected, as_undirected(gnp_arbitrary))
gnp_random <- as_directed(gnp_undirected, mode = "random")
expect_equal(degree(gnp_undirected), degree(gnp_random))
expect_isomorphic(gnp_undirected, as_undirected(gnp_random))
gnp_acyclic <- as_directed(gnp_undirected, mode = "acyclic")
expect_equal(degree(gnp_undirected), degree(gnp_acyclic))
expect_isomorphic(gnp_undirected, as_undirected(gnp_acyclic))
})
test_that("as_directed keeps attributes", {
g <- graph_from_literal(A - B - C, D - A, E)
g$name <- "Small graph"
g_mutual <- as_directed(g, mode = "mutual")
expect_equal(g_mutual$name, g$name)
expect_equal(V(g_mutual)$name, V(g)$name)
g_arbitrary <- as_directed(g, mode = "arbitrary")
expect_equal(g_arbitrary$name, g$name)
expect_equal(V(g_arbitrary)$name, V(g)$name)
E(g)$weight <- seq_len(ecount(g))
g_mutual <- as_directed(g, "mutual")
df_mutual <- as_data_frame(g_mutual)
expect_equal(
df_mutual[order(df_mutual[, 1], df_mutual[, 2]), ]$weight,
c(1, 2, 1, 3, 3, 2)
)
g_arbitrary <- as_directed(g, "arbitrary")
df_arbitrary <- as_data_frame(g_arbitrary)
expect_equal(
df_arbitrary[order(df_arbitrary[, 1], df_arbitrary[, 2]), ]$weight,
1:3
)
})
test_that("as.directed() deprecation", {
local_igraph_options(print.id = FALSE)
g <- sample_gnp(100, 2 / 100)
expect_snapshot(is_directed(as.directed(g, mode = "mutual")))
})
test_that("as.undirected() deprecation", {
local_igraph_options(print.id = FALSE)
g <- sample_gnp(100, 2 / 100)
expect_snapshot(is_directed(as.undirected(g, mode = "collapse")))
})
test_that("as_undirected() keeps attributes", {
g <- graph_from_literal(A +-+ B, A --+ C, C +-+ D)
g$name <- "Tiny graph"
E(g)$weight <- seq_len(ecount(g))
g_tiny <- as_undirected(g, mode = "collapse")
df_tiny <- as_data_frame(g_tiny)
expect_equal(g_tiny$name, g$name)
expect_equal(df_tiny[order(df_tiny[, 1], df_tiny[, 2]), ]$weight, c(4, 2, 9))
g_each <- as_undirected(g, mode = "each")
df_each <- as_data_frame(g_each)
expect_equal(g_each$name, g$name)
expect_equal(
df_each[order(df_each[, 1], df_each[, 2]), ]$weight,
c(1, 3, 2, 4, 5)
)
g_mutual <- as_undirected(g, mode = "mutual")
df_mutual <- as_data_frame(g_mutual)
expect_equal(g_mutual$name, g$name)
expect_equal(
df_mutual[order(df_mutual[, 1], df_mutual[, 2]), ]$weight,
c(4, 9)
)
})
test_that("as_adjacency_matrix() works -- sparse", {
g <- make_graph(c(1, 2, 2, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 2, 4, 2, 4, 2), directed = TRUE)
basic_adj_matrix <- as_adjacency_matrix(g)
expect_s4_class(basic_adj_matrix, "dgCMatrix")
expected_matrix <- matrix(
c(0, 1, 0, 0, 1, 1, 0, 3, 0, 0, 2, 0, 0, 0, 1, 0),
nrow = 4L, ncol = 4L
)
basic_adj_matrix_dense <- as_unnamed_dense_matrix(basic_adj_matrix)
expect_equal(basic_adj_matrix_dense, expected_matrix)
V(g)$name <- letters[1:vcount(g)]
letter_adj_matrix <- as_adjacency_matrix(g)
expect_s4_class(letter_adj_matrix, "dgCMatrix")
expect_setequal(rownames(letter_adj_matrix), letters[1:vcount(g)])
letter_adj_matrix_dense <- as_unnamed_dense_matrix(letter_adj_matrix)
expect_equal(basic_adj_matrix_dense, letter_adj_matrix_dense)
E(g)$weight <- c(1.2, 3.4, 2.7, 5.6, 6.0, 0.1, 6.1, 3.3, 4.3)
weight_adj_matrix <- as_adjacency_matrix(g, attr = "weight")
expect_s4_class(weight_adj_matrix, "dgCMatrix")
expect_equal(
as.matrix(weight_adj_matrix),
matrix(
c(0, 3.4, 0, 0, 1.2, 2.7, 0, 13.7, 0, 0, 11.6, 0, 0, 0, 0.1, 0),
nrow = 4L,
ncol = 4L,
dimnames = list(c("a", "b", "c", "d"), c("a", "b", "c", "d"))
)
)
})
test_that("as_adjacency_matrix() works -- sparse + not both", {
dg <- make_graph(c(1, 2, 2, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 2, 4, 2, 4, 2), directed = TRUE)
g <- as_undirected(dg, mode = "each")
lower_adj_matrix <- as_adjacency_matrix(g, type = "lower")
expect_s4_class(lower_adj_matrix, "dgCMatrix")
lower_expected_matrix <- matrix(
c(0, 2, 0, 0, 0, 1, 0, 3, 0, 0, 2, 1, 0, 0, 0, 0),
nrow = 4L, ncol = 4L
)
lower_expected_matrix_dense <- as_unnamed_dense_matrix(lower_expected_matrix)
expect_equal(lower_expected_matrix, lower_expected_matrix_dense)
upper_adj_matrix <- as_adjacency_matrix(g, type = "upper")
expect_s4_class(upper_adj_matrix, "dgCMatrix")
upper_expected_matrix <- matrix(
c(0, 0, 0, 0, 2, 1, 0, 0, 0, 0, 2, 0, 0, 3, 1, 0),
nrow = 4L, ncol = 4L
)
upper_adj_matrix_dense <- as_unnamed_dense_matrix(upper_adj_matrix)
expect_equal(upper_adj_matrix_dense, upper_expected_matrix)
})
test_that("as_adjacency_matrix() errors well -- sparse", {
g <- make_graph(c(1, 2, 2, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 2, 4, 2, 4, 2), directed = TRUE)
expect_snapshot(as_adjacency_matrix(g, attr = "bla"), error = TRUE)
E(g)$bla <- letters[1:ecount(g)]
expect_snapshot(as_adjacency_matrix(g, attr = "bla"), error = TRUE)
})
test_that("as_adjacency_matrix() works -- sparse undirected", {
dg <- make_graph(c(1, 2, 2, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 2, 4, 2, 4, 2), directed = TRUE)
ug <- as_undirected(dg, mode = "each")
adj_matrix <- as_adjacency_matrix(ug)
expect_s4_class(adj_matrix, "dgCMatrix")
adj_matrix_dense <- as_unnamed_dense_matrix(adj_matrix)
expect_equal(
adj_matrix_dense,
matrix(
c(0, 2, 0, 0, 2, 1, 0, 3, 0, 0, 2, 1, 0, 3, 1, 0),
nrow = 4L,
ncol = 4L
)
)
})
test_that("as_adjacency_matrix() works -- dense", {
g <- make_graph(c(1, 2, 2, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 2, 4, 2, 4, 2), directed = TRUE)
basic_adj_matrix <- as_adjacency_matrix(g, sparse = FALSE)
expected_matrix <- matrix(
c(0, 1, 0, 0, 1, 1, 0, 3, 0, 0, 2, 0, 0, 0, 1, 0),
nrow = 4L, ncol = 4L
)
expect_equal(basic_adj_matrix, expected_matrix)
V(g)$name <- letters[1:vcount(g)]
letter_adj_matrix <- as_adjacency_matrix(g, sparse = FALSE)
expect_true(inherits(letter_adj_matrix, "matrix"))
expect_setequal(rownames(letter_adj_matrix), letters[1:vcount(g)])
expect_equal(basic_adj_matrix, unname(letter_adj_matrix))
E(g)$weight <- c(1.2, 3.4, 2.7, 5.6, 6.0, 0.1, 6.1, 3.3, 4.3)
weight_adj_matrix <- as_adjacency_matrix(g, attr = "weight", sparse = FALSE)
expect_equal(
weight_adj_matrix,
matrix(
c(0, 3.4, 0, 0, 1.2, 2.7, 0, 13.7, 0, 0, 11.6, 0, 0, 0, 0.1, 0),
nrow = 4L,
ncol = 4L,
dimnames = list(c("a", "b", "c", "d"), c("a", "b", "c", "d"))
)
)
})
test_that("as_adjacency_matrix() errors well -- dense", {
g <- make_graph(c(1, 2, 2, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 2, 4, 2, 4, 2), directed = TRUE)
expect_snapshot(
as_adjacency_matrix(g, attr = "bla", sparse = FALSE),
error = TRUE
)
E(g)$bla <- letters[1:ecount(g)]
expect_snapshot(
as_adjacency_matrix(g, attr = "bla", sparse = FALSE),
error = TRUE
)
})
test_that("as_adjacency_matrix() works -- dense undirected", {
dg <- make_graph(c(1, 2, 2, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 2, 4, 2, 4, 2), directed = TRUE)
ug <- as_undirected(dg, mode = "each")
adj_matrix <- as_adjacency_matrix(ug, sparse = FALSE)
dimnames(adj_matrix) <- NULL
expect_equal(
adj_matrix,
matrix(
c(0, 2, 0, 0, 2, 1, 0, 3, 0, 0, 2, 1, 0, 3, 1, 0),
nrow = 4L, ncol = 4L
)
)
E(ug)$weight <- c(1.2, 3.4, 2.7, 5.6, 6.0, 0.1, 6.1, 3.3, 4.3)
weight_adj_matrix <- as_adjacency_matrix(ug, sparse = FALSE, attr = "weight")
dimnames(weight_adj_matrix) <- NULL
expect_equal(
weight_adj_matrix,
matrix(
c(0, 4.6, 0, 0, 4.6, 2.7, 0, 13.7, 0, 0, 11.6, 0.1, 0, 13.7, 0.1, 0),
nrow = 4L,
ncol = 4L
)
)
})
test_that("as_adjacency_matrix() works -- dense + not both", {
dg <- make_graph(c(1, 2, 2, 1, 2, 2, 3, 3, 3, 3, 3, 4, 4, 2, 4, 2, 4, 2), directed = TRUE)
g <- as_undirected(dg, mode = "each")
E(g)$attribute <- c(1.2, 3.4, 2.7, 5.6, 6.0, 0.1, 6.1, 3.3, 4.3)
lower_adj_matrix <- as_adjacency_matrix(
g,
type = "lower",
sparse = FALSE,
attr = "attribute"
)
dimnames(lower_adj_matrix) <- NULL
expect_equal(
lower_adj_matrix,
matrix(
c(0, 4.6, 0, 0, 0, 2.7, 0, 13.7, 0, 0, 11.6, 0.1, 0, 0, 0, 0),
nrow = 4L,
ncol = 4L
)
)
upper_adj_matrix <- as_adjacency_matrix(
g,
type = "upper",
sparse = FALSE,
attr = "attribute"
)
dimnames(upper_adj_matrix) <- NULL
expect_equal(
upper_adj_matrix,
matrix(
c(0, 0, 0, 0, 4.6, 2.7, 0, 0, 0, 0, 11.6, 0, 0, 13.7, 0.1, 0),
nrow = 4L,
ncol = 4L
)
)
})
test_that("as_adjacency_matrix() works -- dense + weights", {
g <- make_full_graph(5, directed = FALSE)
E(g)$weight <- 1:10
mat <- matrix(0, 5, 5)
mat[lower.tri(mat)] <- 1:10
mat <- mat + t(mat)
A <- as_adjacency_matrix(g, attr = "weight", sparse = FALSE)
expect_equal(as_unnamed_dense_matrix(A), mat)
})
test_that("as_biadjacency_matrix() works -- dense + weights", {
g <- make_bipartite_graph(c(0, 1, 0, 1, 0, 0), c(1, 2, 2, 3, 3, 4))
E(g)$weight <- c(2, 4, 6)
A <- as_biadjacency_matrix(g, attr = "weight", sparse = FALSE)
mat <- matrix(
c(2, 4, 0, 0, 0, 6, 0, 0),
nrow = 4L,
ncol = 2L,
dimnames = list(c("1", "3", "5", "6"), c("2", "4"))
)
expect_equal(as_unnamed_dense_matrix(A), as_unnamed_dense_matrix(mat))
})
test_that("as_adj works", {
g <- sample_gnp(50, 1 / 50)
A <- as_adjacency_matrix(g, sparse = FALSE)
g2 <- graph_from_adjacency_matrix(A, mode = "undirected")
expect_isomorphic(g, g2)
A <- as_adjacency_matrix(g, sparse = TRUE)
g2 <- graph_from_adjacency_matrix(A, mode = "undirected")
expect_isomorphic(g, g2)
g <- sample_gnp(50, 2 / 50, directed = TRUE)
A <- as_adjacency_matrix(g, sparse = FALSE)
g2 <- graph_from_adjacency_matrix(A)
expect_isomorphic(g, g2)
A <- as_adjacency_matrix(g, sparse = TRUE)
g2 <- graph_from_adjacency_matrix(A)
expect_isomorphic(g, g2)
})
test_that("as_adj_list works", {
g <- sample_gnp(50, 2 / 50)
adj_list <- as_adj_list(g)
expect_s3_class(adj_list[[1]], "igraph.vs")
g_same <- graph_from_adj_list(adj_list, mode = "all")
expect_isomorphic(g, g_same)
expect_isomorphic(
g,
g_same,
method = "vf2",
vertex.color1 = seq_len(vcount(g)),
vertex.color2 = seq_len(vcount(g_same))
)
adj_el_list <- as_adj_edge_list(g)
expect_s3_class(adj_el_list[[1]], "igraph.es")
for (i in seq_len(vcount(g))) {
incident_to_i <- E(g)[.inc(i)]
expect_equal(
length(incident_to_i),
length(adj_el_list[[i]]),
ignore_attr = TRUE
)
expect_equal(
sort(adj_el_list[[i]]),
sort(incident_to_i),
ignore_attr = TRUE
)
}
g <- sample_gnp(50, 4 / 50, directed = TRUE)
adj_el_list_out <- as_adj_edge_list(g, mode = "out")
for (i in seq_len(vcount(g))) {
incident_to_i <- E(g)[.from(i)]
expect_equal(
length(incident_to_i),
length(adj_el_list_out[[i]]),
ignore_attr = TRUE
)
expect_equal(
sort(adj_el_list_out[[i]]),
sort(incident_to_i),
ignore_attr = TRUE
)
}
adj_el_list_in <- as_adj_edge_list(g, mode = "in")
for (i in seq_len(vcount(g))) {
incident_to_i <- E(g)[.to(i)]
expect_equal(
length(incident_to_i),
length(adj_el_list_in[[i]]),
ignore_attr = TRUE
)
expect_equal(
sort(adj_el_list_in[[i]]),
sort(incident_to_i),
ignore_attr = TRUE
)
}
})
test_that("as_adj_list works when return.vs.es is FALSE", {
on.exit(try(igraph_options(old)), add = TRUE)
old <- igraph_options(return.vs.es = FALSE)
g <- sample_gnp(50, 2 / 50)
adj_list <- as_adj_list(g)
expect_s3_class(adj_list[[1]], NA)
g2 <- graph_from_adj_list(adj_list, mode = "all")
expect_isomorphic(g, g2)
expect_isomorphic(
g,
g2,
method = "vf2",
vertex.color1 = 1:vcount(g),
vertex.color2 = 1:vcount(g2)
)
adj_el_list <- as_adj_edge_list(g)
for (i in seq_len(vcount(g))) {
incident_to_i <- E(g)[.inc(i)]
expect_equal(
length(incident_to_i),
length(adj_el_list[[i]]),
ignore_attr = TRUE
)
expect_equal(
sort(adj_el_list[[i]]),
sort(incident_to_i),
ignore_attr = TRUE
)
}
g <- sample_gnp(50, 4 / 50, directed = TRUE)
adj_el_list_out <- as_adj_edge_list(g, mode = "out")
for (i in seq_len(vcount(g))) {
incident_to_i <- E(g)[.from(i)]
expect_equal(
length(incident_to_i),
length(adj_el_list_out[[i]]),
ignore_attr = TRUE
)
expect_equal(
sort(adj_el_list_out[[i]]),
sort(incident_to_i),
ignore_attr = TRUE
)
}
adj_el_list_in <- as_adj_edge_list(g, mode = "in")
for (i in seq_len(vcount(g))) {
incident_to_i <- E(g)[.to(i)]
expect_equal(
length(incident_to_i),
length(adj_el_list_in[[i]]),
ignore_attr = TRUE
)
expect_equal(
sort(adj_el_list_in[[i]]),
sort(incident_to_i),
ignore_attr = TRUE
)
}
})
test_that("as_edgelist works", {
g <- sample_gnp(100, 3 / 100)
el <- as_edgelist(g)
g2 <- make_graph(t(el), n = vcount(g), dir = FALSE)
expect_isomorphic(g, g2)
})
test_that("as_biadjacency_matrix() works -- dense", {
biadj_mat <- matrix(sample(0:1, 35, replace = TRUE, prob = c(3, 1)), ncol = 5)
g <- graph_from_biadjacency_matrix(biadj_mat)
biadj_mat2 <- as_biadjacency_matrix(g)
expect_equal(biadj_mat, biadj_mat2, ignore_attr = TRUE)
expect_identical(rownames(biadj_mat2), as.character(1:7))
expect_identical(colnames(biadj_mat2), as.character(8:12))
})
test_that("as_biadjacency_matrix() works -- dense named", {
biadj_mat <- matrix(sample(0:1, 35, replace = TRUE, prob = c(3, 1)), ncol = 5)
g <- graph_from_biadjacency_matrix(biadj_mat)
V(g)$name <- letters[1:length(V(g))]
expect_true(is_named(g))
biadj_mat2 <- as_biadjacency_matrix(g)
expect_equal(biadj_mat, biadj_mat2, ignore_attr = TRUE)
expect_identical(rownames(biadj_mat2), c("a", "b", "c", "d", "e", "f", "g"))
expect_identical(colnames(biadj_mat2), c("h", "i", "j", "k", "l"))
})
test_that("as_biadjacency_matrix() works -- sparse", {
biadj_mat <- matrix(sample(0:1, 35, replace = TRUE, prob = c(3, 1)), ncol = 5)
g <- graph_from_biadjacency_matrix(biadj_mat)
biadj_mat2 <- as_biadjacency_matrix(g, sparse = TRUE)
expect_equal(as.matrix(biadj_mat2), biadj_mat, ignore_attr = TRUE)
expect_identical(rownames(biadj_mat2), as.character(1:7))
expect_identical(colnames(biadj_mat2), as.character(8:12))
})
test_that("graph_from_adj_list works", {
g <- sample_gnp(100, 3 / 100)
adj_list <- as_adj_list(g)
g2 <- graph_from_adj_list(adj_list, mode = "all")
expect_isomorphic(g, g2)
##
g <- sample_gnp(100, 3 / 100, directed = TRUE)
adj_list_out <- as_adj_list(g, mode = "out")
g2 <- graph_from_adj_list(adj_list_out, mode = "out")
expect_isomorphic(g, g2)
})
test_that("graph_from_edgelist works", {
withr::local_seed(20230115)
g <- sample_gnp(50, 5 / 50)
el <- as_edgelist(g)
g2 <- graph_from_edgelist(el, directed = FALSE)
expect_isomorphic(g, g2)
####
g <- sample_gnp(50, 5 / 50, directed = TRUE)
el <- as_edgelist(g)
g2 <- graph_from_edgelist(el, directed = TRUE)
expect_isomorphic(g, g2)
####
g <- sample_gnp(26, 5 / 26, directed = TRUE)
el <- as_edgelist(g)
n <- letters[1:26]
names(n) <- 1:26
mode(el) <- "character"
el[] <- n[el]
g2 <- graph_from_edgelist(el, directed = TRUE)
expect_isomorphic(g, g2)
})
test_that("graphNEL conversion works", {
skip_if_not_installed("graph")
set.seed(20250122)
g <- sample_gnp(100, 5 / 100)
g_graphnel <- as_graphnel(g)
g2 <- graph_from_graphnel(g_graphnel)
gi <- isomorphic(g, g2, method = "vf2")
expect_true(gi)
## Attributes
V(g)$name <- as.character(vcount(g):1)
E(g)$weight <- sample(1:10, ecount(g), replace = TRUE)
g$name <- "Foobar"
g_graphnel1 <- as_graphnel(g)
g2 <- graph_from_graphnel(g_graphnel1)
expect_isomorphic(g, g2)
expect_equal(V(g)$name, V(g2)$name)
A <- as_adjacency_matrix(g, attr = "weight", sparse = FALSE)
A2 <- as_adjacency_matrix(g2, attr = "weight", sparse = FALSE)
expect_equal(A, A)
expect_equal(g$name, g2$name)
})
test_that("graphNEL does not duplicate loop edges", {
skip_if_not_installed("graph")
mat <- matrix(c(1, 0.5, 0.5, 0), nrow = 2)
dimnames(mat) <- list(c("A", "B"), c("A", "B"))
igr <- graph_from_adjacency_matrix(mat, mode = "undirected", weighted = T)
grNEL <- as_graphnel(igr)
expect_equal(graph::edgeL(grNEL)$A$edges, c(1, 2))
})
test_that("as_long_data_frame() works correctly with and without names", {
expect_snapshot({
ring <- make_ring(3)
as_long_data_frame(ring)
V(ring)$name <- letters[1:3]
as_long_data_frame(ring)
V(ring)$score <- LETTERS[1:3]
as_long_data_frame(ring)
E(ring)$info <- 3:1
as_long_data_frame(ring)
})
})
test_that("graph_from_data_frame works", {
local_igraph_options(print.full = TRUE)
actors <- data.frame(
name = c(
"Alice", "Bob", "Cecil", "David",
"Esmeralda"
),
age = c(48, 33, 45, 34, 21),
gender = c("F", "M", "F", "M", "F"),
stringsAsFactors = FALSE
)
relations <- data.frame(
from = c(
"Bob", "Cecil", "Cecil", "David",
"David", "Esmeralda"
),
to = c(
"Alice", "Bob", "Alice", "Alice",
"Bob", "Alice"
),
same.dept = c(FALSE, FALSE, TRUE, FALSE, FALSE, TRUE),
friendship = c(4, 5, 5, 2, 1, 1),
advice = c(4, 5, 5, 4, 2, 3),
stringsAsFactors = FALSE
)
g <- graph_from_data_frame(relations, directed = TRUE, vertices = actors)
df <- as_data_frame(g, what = "both")
expect_equal(df$vertices, actors, ignore_attr = TRUE)
expect_equal(df$edges, relations)
})
test_that("graph_from_data_frame() creates attributes for zero-row data frames (#466)", {
x <- data.frame(
from = integer(),
to = integer(),
foo = integer(),
bar = numeric()
)
g <- graph_from_data_frame(x)
expect_identical(E(g)$foo, integer())
expect_identical(E(g)$bar, numeric())
})
test_that("graph_from_data_frame works on matrices", {
el <- cbind(1:5, 5:1, weight = 1:5)
g <- graph_from_data_frame(el)
g <- delete_vertex_attr(g, "name")
el2 <- as_data_frame(g)
expect_equal(as.data.frame(el), el2, ignore_attr = TRUE)
})
test_that("edge names work", {
## named edges
local_igraph_options(print.edge.attributes = TRUE)
g <- make_ring(10)
E(g)$name <- letters[1:ecount(g)]
g2 <- delete_edges(g, c("b", "d", "e"))
expect_equal(
as_edgelist(g2),
structure(c(1, 3, 6, 7, 8, 9, 1, 2, 4, 7, 8, 9, 10, 10), .Dim = c(7L, 2L))
)
## named vertices
g <- make_ring(10)
V(g)$name <- letters[1:vcount(g)]
g3 <- delete_edges(g, c("a|b", "f|g", "c|b"))
expect_equal(
as_edgelist(g3),
structure(
c("c", "d", "e", "g", "h", "i", "a", "d", "e", "f", "h", "i", "j", "j"),
.Dim = c(7L, 2L)
)
)
## no names at all, but select edges based on vertices
g <- make_ring(10)
g4 <- delete_edges(g, c("1|2", "8|7", "1|10"))
expect_equal(
as_edgelist(g4),
structure(c(2, 3, 4, 5, 6, 8, 9, 3, 4, 5, 6, 7, 9, 10), .Dim = c(7L, 2L))
)
## mix edge names and vertex names
g <- make_ring(10)
V(g)$name <- letters[1:vcount(g)]
E(g)$name <- LETTERS[1:ecount(g)]
g5 <- delete_edges(g, c("a|b", "F", "j|i"))
expect_equal(
as_edgelist(g5),
structure(
c("b", "c", "d", "e", "g", "h", "a", "c", "d", "e", "f", "h", "i", "j"),
.Dim = c(7L, 2L)
)
)
})
test_that("graph_from_edgelist errors for NAs", {
A <- matrix(c(1, 2, NA, 1), 2, 2)
expect_snapshot(graph_from_edgelist(A), error = TRUE)
})
test_that("graph_from_data_frame works with factors", {
actors <- data.frame(
name = c("Alice", "Bob", "Cecil", "David", "Esmeralda"),
age = c(48, 33, 45, 34, 21),
gender = factor(c("F", "M", "F", "M", "F"))
)
relations <- data.frame(
from = c(
"Bob", "Cecil", "Cecil", "David",
"David", "Esmeralda"
),
to = c("Alice", "Bob", "Alice", "Alice", "Bob", "Alice"),
same.dept = c(FALSE, FALSE, TRUE, FALSE, FALSE, TRUE),
friendship = c(4, 5, 5, 2, 1, 1),
advice = c(4, 5, 5, 4, 2, 3)
)
g <- graph_from_data_frame(relations, directed = TRUE, vertices = actors)
g_actors <- as_data_frame(g, what = "vertices")
expect_true(is.factor(V(g)$gender))
expect_true(is.factor(g_actors$gender))
})
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.