图同构:从布尔值中仅提取TRUE

时间:2015-07-11 16:34:48

标签: r igraph

以下是在每个图形对象之间查找图形同构的代码。它会工作正常。

g1 <- graph.ring(10 , directed = FALSE)
g2 <- graph.ring(5 , directed = FALSE)
g3 <- graph.ring(7 , directed = FALSE)
g4 <- graph.ring(10 , directed = FALSE)
g5 <- graph.ring(5 , directed = FALSE)

g <- list(g1,g2,g3,g4,g5)
g 


iso = function(g,i,j)
{ 

   r <- graph.isomorphic(g[[i]],g[[j]])
   return(r)
   print(g[[i]])
   print(g[[j]])

} 
loop_results <- list()
for(i in 1:5)
{
  for(j in 1:5)
  {
    loop_results[i][j] <- list(NULL)
    r= iso(g , i , j)
    print(r)
    print(g[[i]])
    print(g[[j]])
    loop_results[[i]][[j]] <- list(r=r)
 }

}
m <- loop_results
m

m以list的形式给出结果,返回布尔值TRUE或FALSE,因为函数graph.isomorphic如果图形是同构的则返回TRUE,否则返回FALSE。

现在我想从m中仅获取TRUE值。我将运行以下代码,但它不会给我我想要的答案。它返回一个错误:打印错误(m [i] [j] == TRUE):( list)对象无法强制键入'logical'。 任何人都可以提供帮助。

for(i in 1:5)
{
  for(j in 1:5)
  {
    print(m[i][j] == TRUE)

  }
}

1 个答案:

答案 0 :(得分:1)

如果您要测试一组“矩形”条件,那么在矩阵中收集它们会容易得多:

loop_results <- matrix(NA, 5,5);for(i in 1:5)
{
  for(j in 1:5)
  {    
    r= iso(g , i , j)
    loop_results[i,j] <- r
 }
}
m <- loop_results
m
#-----------
      [,1]  [,2]  [,3]  [,4]  [,5]
[1,]  TRUE FALSE FALSE  TRUE FALSE
[2,] FALSE  TRUE FALSE FALSE  TRUE
[3,] FALSE FALSE  TRUE FALSE FALSE
[4,]  TRUE FALSE FALSE  TRUE FALSE
[5,] FALSE  TRUE FALSE FALSE  TRUE

该结果很容易使用which函数及其arr.ind参数&gt;

> which(m, arr.ind=TRUE)
      row col
 [1,]   1   1
 [2,]   4   1
 [3,]   2   2
 [4,]   5   2
 [5,]   3   3
 [6,]   1   4
 [7,]   4   4
 [8,]   2   5
 [9,]   5   5