2016-07-28 18 views
1

Irgendeine Idee, was ich falsch in der folgenden Syntax mache? Ich versuche, meine Knoten durch das kontinuierliche Attribut "EM" mit einem Farbverlauf zu färben. Nach dem letzten Befehl erhalte ich die Fehlermeldung:igraph: Färben von Knoten durch kontinuierliche Attributvektor

Error in palf[V(g)$EM] : object of type 'closure' is not subsettable

Ich weiß nicht, was das bedeutet.

library(igraph) # This loads the igraph package 
dat=read.csv(file.choose(),header=TRUE,row.names=1,check.names=FALSE) # choose an adjacency matrix from a .csv file 
m=as.matrix(dat) # coerces the data set as a matrix 
g=graph.adjacency(m,mode="undirected",weighted=NULL) # this will create an 'igraph object' 

a=read.csv(file.choose()) 
V(g)$EM=as.character(a$EM[match(V(g)$name,a$ID)]) # This code says to create a vertex attribute called "EM" by extracting the value of the column "EM" in the attributes file when the ID number matches the vertex name. 
V(g)$EM # This will print the new vertex attribute, "EM" 

palf <- colorRampPalette(c("gray80", "dark red")) 

V(g)$color <- palf[V(g)$EM] 

Antwort

1

Der Fehler bedeutet, Sie versuchen, die [] Operator auf ein Objekt zu verwenden, die es nicht erkennen - weil es keine Untergruppen hat. In diesem Fall ist das Objekt palf, was eine Funktion ist. (R nennt es eine closure, die in diesem Fall im Grunde "Funktionsobjekt" bedeutet.) Was die palf Funktion tatsächlich tut, ist ein Vektor der Farben ramping von "gray80" bis "dunkelrot", mit n Elemente, wobei n ist das Argument, Sie übergeben es.

Ich bin ein wenig unklar, warum Sie "as.character" anstelle von "as.numeric" oder etwas verwenden, aber vorausgesetzt, EM ist eine echte Zahl, wie der Titel Ihrer Frage impliziert, könnten Sie etwas tun dies: (siehe Scale a series between two points)

range1.100 <- function(x){1 + 99*(x-min(x))/(max(x)-min(x))} 
colr <- palf(100); 
V(g)$color <- colr[round(range1.100(V(g)$EM))] 
+0

Sie können 'two.colors' aus den Bereichen Paket anstelle von colorRampPalette. – flies

+0

vielen dank, das hat funktioniert! Ja, ich erkannte, dass ich das Attribut numerisch und nicht irrtümlich gemacht hatte, da ich versuchte, durch das Kopieren der Beispiel-Syntax einer anderen Person – JRO

+0

zu lernen. – flies