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 Comentarios

  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

Dejar respuesta

Please enter your comment!
Please enter your name here