R中iGraph的随机_游走函数不停在吸收态

R中iGraph的随机_游走函数不停在吸收态,r,graph,markov-chains,random-walk,R,Graph,Markov Chains,Random Walk,我试着用R来模拟一个随机游动/马尔可夫链。正如你们所看到的,我已经建立了一个转移矩阵,然后我试着在这个上面运行一个随机游动。这里的问题是,当随机步行者遇到吸收状态(如2和5)时,不会停止,而是继续跑步 我使用的函数是错误的还是其他地方有问题?实际上,我想要实现的是打印出步行者访问的所有顶点 library(igraph) # Produce a transition matrix. tm <- read.table(row.names=1, header=FALSE, text=" 1

我试着用R来模拟一个随机游动/马尔可夫链。正如你们所看到的,我已经建立了一个转移矩阵,然后我试着在这个上面运行一个随机游动。这里的问题是,当随机步行者遇到吸收状态(如2和5)时,不会停止,而是继续跑步

我使用的函数是错误的还是其他地方有问题?实际上,我想要实现的是打印出步行者访问的所有顶点

library(igraph)

# Produce a transition matrix.
tm <- read.table(row.names=1, header=FALSE, text="
1 0.2 0.3 0.1 0.2 0.1 0.1 
6 0.3 0.2 0.4 0.1 0 0 
3 0 0.2 0.4 0.1 0.2 0.1 
4 0.2 0.1 0.2 0.3 0.1 0.1
5 0 0 0 0 1 0
2 0 0 0 0 0 1")

tm<-as.matrix(tm)
row.names(tm) <- c(1,6,3,4,5,2)
colnames(tm) <- c(1,6,3,4,5,2)

g1 <- graph.adjacency(tm, mode="undirected", weighted=TRUE)

random_walk( graph = g1, start = '4', steps = 100, stuck = "error" )

正如你所看到的,它不会在2或5处停止。

如果你认为这些状态是吸收的,那么你是按照有向的,而不是无向的解释你的邻接图。使用
mode=“directed”
。然后,当您绘制图形时,您将看到循环更好地指示了您可以移动的位置(请注意,不再有任何线从节点2引出)


谢谢你帮助我。它实际上改变了随机行走的行为,但是如果你告诉它走100步,第4步是吸收状态,它不会停在那里,而是以相同的数字继续,直到达到100步。也许我必须建立一个函数来移除额外的吸收态。
 [1] 4 5 3 4 4 4 3 3 2 2 4 4 2 2 3 4 4 5 5 3 5 5 3 6 3 3 3 4 4 4 6 4 4 4 4 2 2 4 3 6 3 2 2 2 4 1
 [47] 4 3 4 1 1 4 2 3 6 6 6 6 4 3 6 6 6 3 5 5 3 5 5 5 3 1 1 3 2 4 4 2 1 1 1 2 3 1 2 1 1 2 2 1 5 3
 [93] 5 4 4 2 4 3 4 4