R igraph:无法设置边序列的属性
R igraph: can't set the attributes of an edge sequence
我正在尝试根据特定条件使用 edge_attr(或者 set_edge_attr)来操作 R 中 igraph 对象中边的子集的属性。例如,在下面的代码中,我试图将权重 = 1 的边的年龄属性加倍。
nodes <- data.frame(name=c('1', '4', '5', '6', '8'))
edges <- data.frame(
from = c('1', '4', '5', '1', '8', '1'),
to = c('4', '5', '6', '8', '6', '6'),
weight = c(1, 1, 1.5, 1.5, 2.5, 5),
age=c(48, 33, 45, 34, 21, 56)
)
graph = graph_from_data_frame(d = edges, vertices = nodes, directed=FALSE)
edgeseq = E(graph)[[weight==1]]
newage <- edge_attr(graph, "age", index = edgeseq)*2
edge_attr(graph, "age", edgeseq) <- newage
#Alternatively:
set_edge_attr(graph, "age", edgeseq, newage)
但是,这会引发错误:
Error in `[[<-`(`*tmp*`, index, value = value) :
attempt to select more than one element in vectorIndex
当我设置没有边序列的属性时不会出现错误。
任何帮助将不胜感激!
select 边的正确方法是:
edgeseq = E(graph)[weight==1]
注意区别:
E(graph)[weight==1]
+ 2/6 edges from 33d7121 (vertex names):
[1] 1--4 4--5
E(graph)[[weight==1]]
+ 2/6 edges from 33d7121 (vertex names):
tail head tid hid weight age
1 1 4 1 2 1 96
2 4 5 2 3 1 66
我正在尝试根据特定条件使用 edge_attr(或者 set_edge_attr)来操作 R 中 igraph 对象中边的子集的属性。例如,在下面的代码中,我试图将权重 = 1 的边的年龄属性加倍。
nodes <- data.frame(name=c('1', '4', '5', '6', '8'))
edges <- data.frame(
from = c('1', '4', '5', '1', '8', '1'),
to = c('4', '5', '6', '8', '6', '6'),
weight = c(1, 1, 1.5, 1.5, 2.5, 5),
age=c(48, 33, 45, 34, 21, 56)
)
graph = graph_from_data_frame(d = edges, vertices = nodes, directed=FALSE)
edgeseq = E(graph)[[weight==1]]
newage <- edge_attr(graph, "age", index = edgeseq)*2
edge_attr(graph, "age", edgeseq) <- newage
#Alternatively:
set_edge_attr(graph, "age", edgeseq, newage)
但是,这会引发错误:
Error in `[[<-`(`*tmp*`, index, value = value) :
attempt to select more than one element in vectorIndex
当我设置没有边序列的属性时不会出现错误。 任何帮助将不胜感激!
select 边的正确方法是:
edgeseq = E(graph)[weight==1]
注意区别:
E(graph)[weight==1]
+ 2/6 edges from 33d7121 (vertex names):
[1] 1--4 4--5
E(graph)[[weight==1]]
+ 2/6 edges from 33d7121 (vertex names):
tail head tid hid weight age
1 1 4 1 2 1 96
2 4 5 2 3 1 66