基于 R 中的环形网络创建最左和最右邻居的向量

问题描述 投票:0回答:1

我有一个环形网络,其中代理应该根据其迭代的左侧和右侧最接近的“邻居伙伴”按顺序进行交互。

我需要为每个代理 i 创建一个向量(即它们的“交互序列”),例如 1:100。

对于 i = 1,向量应如下所示: c(2,100,3,99,4,98,...) 意味着 i=1 最接近 2,然后是 100,然后是 3,然后是 99 ...

对于 i = 2,向量应如下所示: c(1,3,100,4,99,...) 意味着 i=2 最接近 1,然后是 3,然后是 100,然后是 4 ...

对于 i = 50,向量应如下所示: c(49,51,48,52,47,...) 意味着 i=50 最接近 49,然后是 51,然后是 48,然后是 52 ...

[...]

对于 i = 100,向量应如下所示: c(99,1,98,2,97,...) 意味着 i=100 最接近 99,然后是 1,然后是 100,然后是 4 ...

不均匀的代理(即 i %% 2 == 1)从最右边的邻居开始,然后是最左边的邻居,依此类推。 即使代理(即 i %% 2 == 0)也从最左边的邻居开始,然后是最右边的邻居,依此类推。

我努力并需要帮助寻找一种有效的算法,可以为给定的 i 生成向量(或所有向量的矩阵),最好避免循环。

r graph-theory
1个回答
0
投票
foo <- function(i, x) {
  if (i == 1L) x <- x[-1L]
  else x <- x[c((i+1):length(x), 1L:(i-1L))]
  # Right should come before left
  x[order(pmin(abs(x - i), abs(x - n - i)))]
}
x <- 1:100
foo(1, x)
# [1]  2 100   3  99   4  98   5 ...
© www.soinside.com 2019 - 2024. All rights reserved.