2015-04-21 9 views
5

sto lavorando con un grafico che ha 121 vertici e 209 bordi e sto cercando di rimuovere da questo grafico vertici che soddisfano due condizioni:condizionale rimozione di vertici in base agli attributi di r

  1. degree(my.graph)==0
  2. il nome del vertice inizia con un carattere specificato.

Ecco un esempio che mostra ciò che voglio ottenere. Dal grafico seguente:

toy.graph <- graph.formula(121-221,121-345,121-587,345-587,221-587, 490, 588) 

desidero rimuovere vertici con grado 0 che iniziano con 5. In questo caso voglio rimuovere solo vertice 588 (ma non 490 e 587). So come rimuovere i vertici che iniziano con 5:

delete.vertices(toy.graph,V(toy.graph)$name 
       %in% grep("^5",V(toy.graph)$name,value=T)) 

e come rimuovere i vertici con grado 0:

delete.vertices(toy.graph, V(toy.graph)[degree(toy.graph)==0]) 

ma quando provo a mettere insieme queste due condizioni, che è

delete.vertices(toy.graph, V(toy.graph)$name %in%  
       grep("^5",V(toy.graph)$name,value=T) 
       && V(toy.graph)[degree(toy.graph)==0]) 

non funziona e torno al grafico completo. C'è un modo speciale di combinare più condizioni per rimuovere i vertici?

Grazie!

+0

Usa 'e', non '' &&. (Vedi la pagina di aiuto di '? Logic' per la differenza) – MrFlick

+0

Ho appena capito anche io. Stavo usando un operatore sbagliato per e. Grazie! – Justyna

+0

Quindi, quando lo fai con "+" invece di "&&" ottieni quello che vuoi? Per me, questo lascia 490 nel grafico, e ho pensato che volessi liberarti del 490 dal momento che ha un grado di 0. – Jota

risposta

4

Credo che questo sia ciò che si vuole:

delete.vertices(toy.graph, 
      V(toy.graph)[ degree(toy.graph) == 0 & 
          grepl("^5", V(toy.graph)$name) ]) 

pozdrawiam :)

Problemi correlati