Atributo de configuración de R igraph incorrectamente

Resuelto MoonS asked hace 54 años • 0 respuestas

Estoy intentando set_vertex_attributehacer un gráfico y noto que la función asigna atributos incorrectamente. Se han informado problemas similares aquí: R - Atributos de vértice - 'Valor inadecuado proporcionado en set.vertex.attribute'. Pero intenté cambiar el classpersonaje sin suerte. ¿Cual podría ser el problema?

Datos:

crops <- structure(list(target = c("Angola", "Angola", "Bahrain",
                                  "Benin", "Benin", "Bolivia"), source = c("Argentina",
                                                                                           "Botswana", "Bahrain", "Angola", "Bolivia", "Benin"), weight = c(112858157.048368,
                                                                                                                                                               45859551593.4988, 70972664.5057742, 1291072130433.34, 70268376116.3827,
                                                                                                                                                               410763090.329797)), row.names = c(NA, -6L), class = c("data.table",
                                                                                                                                                                                                                     "data.frame"))

com <- structure(list(name = c("Angola", "Argentina", "Bahrain", "Benin",
                               "Bolivia", "Botswana"), com = c(1L, 2L, 3L, 4L, 5L, 6L)), row.names = c(NA,
                                                                                                       6L), class = "data.frame")

Código:

g <- graph.data.frame(crops, directed=TRUE)

nodes <- get.data.frame(g, what = "vertices")

nodes_com <- merge(nodes,com, by = "name")

nodes_com$com <-  as.character(nodes_com$com)

g <- set_vertex_attr(g, "com", value = nodes_com$com) 

#validation test - here I discover V(g)$com is different than in nodes_com
df <- data.frame(name = V(g)$name, com = V(g)$com) 
MoonS avatar Jan 01 '70 08:01 MoonS
Aceptado

Creo que deberías usar sort = FALSEcuando merge, por ejemplo,

nodes_com <- merge(nodes, com, by = "name", sort = FALSE)

y luego obtendrás

> df
       name com
1    Angola   1
2   Bahrain   3
3     Benin   4
4   Bolivia   5
5 Argentina   2
6  Botswana   6

que tiene las mismas filas que encom

> com
       name com
1    Angola   1
2 Argentina   2
3   Bahrain   3
4     Benin   4
5   Bolivia   5
6  Botswana   6
ThomasIsCoding avatar Feb 16 '2024 20:02 ThomasIsCoding