Cómo mostrar todos los gráfico vértice atributos de R?

Estoy usando el igraph paquete en R.

Me gustaría asociar algunos datos con cada vértice, por ejemplo, mediante la adición de identificación y descripción de los atributos para cada uno. Los atributos se determina en tiempo de ejecución. Tengo un par de preguntas sobre cómo establecer y obtener estos datos.

Para establecer un vértice de la identificación del yo uso (donde g es un gráfico):

> set.vertex.attribute(g,'id',1,'first_id') # etc

Esperaba ser capaz de leer los atributos de vuelta con:

> get.vertex.attribute(g,'id',1)

Pero esto devuelve NULL. Estoy haciendo algo mal?

Además, la función con la get.vertex.attribute llamada no tiene acceso a la lista de nombres de atributo. ¿Cómo puedo extraer los nombres de atributo de la gráfica g?

Por último, quiero establecer/obtener los valores de los atributos de/en el nombre de una lista. Hay una manera sencilla de hacerlo sin el bucle a través de cada vértice y el atributo y la aplicación de set.– o get.vertex.attribute?

gracias!

Tenido la misma experiencia. Gracias por publicar.

OriginalEl autor Racing Tadpole | 2013-11-15

2 respuestas

  1. 13

    Se ve como se tiene que asignar los resultados de set.vertex.attribute de vuelta a g así:

    g <- graph.data.frame(data.frame(one=1:2,two=2:3))
    g <- set.vertex.attribute(g,'id',1,'first_id')
    get.vertex.attribute(g,'id',1)
    #[1] "first_id"

    Como la ayuda en ?get.vertex.attribute dice:

    gráfico: El gráfico del objeto de trabajo. Tenga en cuenta que el gráfico original es
    nunca modificado, un nuevo objeto gráfico se devuelve en su lugar; si
    usted no asigna a una variable de sus modificaciones serán
    perdido! Vea los ejemplos a continuación.

    Más, desde el mismo archivo de ayuda que hay…

    lista.el gráfico.los atributos de la lista.el vértice.los atributos y la lista.el borde.atributos
    devolver un carácter vectorial, los nombres de los atributos presentes.

    list.vertex.attributes(g)
    #[1] "name" "id"  

    De un vistazo rápido, no parece ser una simple función para escribir en el vértice atributos en masa. Usted puede inventar algo como esto, sin embargo:

    lapply(list.vertex.attributes(g),function(x) get.vertex.attribute(g,x))
    #[[1]]
    #[1] "1" "2" "3"
    # 
    #[[2]]
    #[1] "first_id" NA         NA  
    Fantástico, gracias!
    Debe ser una característica nueva, pero el siguiente comando es muy conveniente para la extracción de todos los vértices de datos de atributos: obtener.de datos.marco()

    OriginalEl autor thelatemail

  2. 7

    Utilice la siguiente sintaxis para asignar el vértice atributos en-lugar:

    > V(g)[1]$id <- "first_id"
    > V(g)[1]$id
    [1] "aaa"

    Esta sintaxis también le permite recuperar o establecer un vértice atributo para todos los vértices; solo omite la indización:

    > V(g)$id <- c("aa", "bb", "cc")
    Eso es justo lo que necesito, gracias.
    Esto funciona bien, pero me pueden ayudar con esto?: Sólo tengo el nombre de atributo en una variable, por ejemplo, idName = “id”. Aunque V(g)$id funciona bien, V(g)[[idName]] me da el error de Error in V(g)[[idName]] : subscript out of bounds. ¿Cómo debo hacer referencia a ella mediante idName? Gracias!
    Yo no soy un experto en R por lo que no sé si hay alguna manera más sencilla, pero después de algunos experimentos que he encontrado que esto funcione: eval(parse(text=paste("V(g)$", varname, sep=""))). Básicamente, esto crea una cadena que contiene la expresión a evaluar, lo analiza y, a continuación, llama eval para evaluar la expresión.
    No, usted no puede hacer esto con V(g)$. En realidad, es la misma con la llanura de las listas, no se puede hacer list$element si element es un nombre de variable. En este caso es necesario utilizar get.vertex.attribute y set.vertex.attribute.

    OriginalEl autor Tamás

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *