如何根据 R 中的条件创建邻接矩阵?

How to create an adjacency matrix based on a condition in R?

我看到了问答:Possible-clique-numbers-of-a-regular-graph

我有一个 vec 向量,我需要创建一个邻接矩阵 A 这样 A[i,j]=1 如果 i−j mod nvec 的一个元素并且A[i,j]=0 否则。

我的尝试:

k   <- 4
n   <- 10
vec <- c(seq(-k+1, -1), seq(1, k+1))

A <- matrix(0, n, n)

for (i in 1:n)
for (j in 1:n)
A[i,j] <- if((i - j) %% n in vec) 1

我收到这个错误:

Error: unexpected 'in' in:
"for (j in 1:n)
A[i,j] <- if((i - j) %% n in"

问题:如何根据条件创建(n x n)-邻接矩阵?

预期结果是:

这就是你想要的吗?

k   <- 4
n   <- 10
vec <- c(seq(-k+1, -1), seq(1, k+1))

outer(vec, vec, FUN = function(i, j) ifelse((i - j %% n) %in% vec, 1, 0))
#     [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8]
#[1,]    0    0    0    0    0    0    0    0
#[2,]    0    0    0    1    0    0    0    0
#[3,]    0    0    0    1    1    0    0    0
#[4,]    0    0    0    0    1    1    1    0
#[5,]    0    0    0    1    0    1    1    1
#[6,]    0    0    0    1    1    0    1    1
#[7,]    1    0    0    1    1    1    0    1
#[8,]    1    1    0    1    1    1    1    0

试试这个。

k   <- 4
n   <- 10
vec <- c(seq(1, k-1), seq(n-k+1, n-1))  # changed

A <- matrix(0, n, n)
for (i in 1:n) for (j in 1:n)  A[i,j] <- (abs(i-j%%n)) %in% vec # changed