首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在没有地图的Tidygraph中,在节点邻域上变异函数

在没有地图的Tidygraph中,在节点邻域上变异函数
EN

Stack Overflow用户
提问于 2022-09-10 16:00:27
回答 1查看 51关注 0票数 1

我有一个带有属性W的图。我想要mutate的平均W的邻居。我想保持代码尽可能简单,试图避免maps和其他显式函数的矢量化,因为这是为了教学目的。

我的代码,试图很好地显示每一段代码如下所示:

代码语言:javascript
复制
set.seed(1810)

create_ring(40) %>%
  mutate(id = row_number()) -> ring

ring %>%
      mutate(W = rnorm(40,75,15)) %>%
      mutate(Neighs = local_members(order = 1,
                                    mindist = 1),
             k = local_size(order = 1,
                            mindist = 1)) -> ring
    
ring %>%
  mutate(
    W_neighs = map_dbl(
      Neighs,
      function(x) mean(W[id %in% unlist(x)])
    )
  )

是否有一种无需重复使用map来执行这些操作的方法?Tidygraph有一个类似的包装器,它是local_ave_degree,包装igraph::knn,用C.

另外,我想解释一下morph是否对这些操作有用。

EN

回答 1

Stack Overflow用户

发布于 2022-09-11 22:46:27

我想您可以使用egoigraph节省很多行(不需要创建列Neighsk),例如,

代码语言:javascript
复制
set.seed(1810)

ring <- create_ring(40) %>%
  mutate(id = row_number()) %>%
  mutate(W = rnorm(40, 75, 15)) %>%
  mutate(W_neighs = 
    as.igraph(.) %>%
      ego(order = 1, mindist = 1) %>%
      sapply(function(v) mean(v$W))
  )

你会看到

代码语言:javascript
复制
> ring
# A tbl_graph: 40 nodes and 40 edges
#
# An undirected simple graph with 1 component
#
# Node Data: 40 × 3 (active)
     id     W W_neighs
  <int> <dbl>    <dbl>
1     1  84.3     96.1
2     2  84.5     91.9
3     3  99.4     91.2
4     4  97.9     67.9
5     5  36.4     89.4
6     6  80.8     51.2
# … with 34 more rows
#
# Edge Data: 40 × 2
   from    to
  <int> <int>
1     1     2
2     2     3
3     3     4
# … with 37 more rows
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73673265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档