2016-07-28 12 views
1

以下の構文で何が間違っているのでしょうか?私は、色のグラデーションを使用して連続的な属性 "EM"でノードを色づけしようとしています。最後のコマンドの後に私はエラーを受け取ります:igraph:連続属性ベクトルによるノードの色づけ

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

私はこれが何を意味するのか分かりません。それは何のサブセットを持っていないので -

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] 

答えて

1

エラーは、あなたがそれを認識していないオブジェクトに[]演算子を使用しようとしていることを意味します。この場合、オブジェクトは関数であるpalfです。 (Rはそれをclosureと呼びますが、この場合は基本的には "関数オブジェクト"を意味します)palf関数が実際に行うことは、n要素で、 "gray80"から "darkred"にランする色のベクトルを与えます。nそれを渡す引数。

「as.numeric」などの代わりに「as.character」を使用している理由は少しわかりますが、EMが実数であると仮定すると、質問のタイトルに示すように、この: (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

あなたがcolorRampPaletteの代わりにフィールドパッケージから 'two.colors'を好むかもしれません。 – flies

+0

ありがとうございます、これはうまくいきました!はい、他の人の例の構文をコピーして覚えようとしていたので、間違ってテキストではなく数値で属性を作成したことに気付きました – JRO

+0

受け入れを忘れないでください;) – flies

関連する問題