如何用 igraph 中的某些比例权重替换矢量值?

How to replace vector values with certain proportional weights in igraph?

我有一个具有 3 个节点属性的标准图:"a"、"b" 和 "c"。我的代码会导致 "a" 和 "b" 的值不断变化,而 "c" 取决于这些值。为了适应不断变化的值,我在 for 循环中使用了以下代码 运行。

V(g)$c[V(g)$a <= V(g)$b] <- sample(c(0, 1), vcount(g), replace = TRUE, prob = c(.9, .1))

但是 returns 警告: 要替换的项目数不是替换长度的倍数。尽管代码运行了,但它没有考虑值的权重。我将如何修复此代码?

问题是您的 sample 语句生成 vcount(g) 值 - 一个用于图表中的 每个 节点。但是您正试图将这些值存储到 V(g)$c[V(g)$a <= V(g)$b] 中。据推测,有时并非每个节点都有 V(g)$a <= V(g)$b,因此存储数据的位置较少。解决这个问题的简单方法是只为属性 c 生成正确数量的值。一种方法是

V(g)$c[V(g)$a <= V(g)$b] <- 
    sample(c(0, 1), sum(V(g)$a <= V(g)$b), replace = TRUE, prob = c(.9, .1))

这只是您的原始陈述,只是我将 vcount(g) 替换为 sum(V(g)$a <= V(g)$b),它计算 V(g)$a <= V(g)$b 的节点数。