以下是在每个图形对象之间查找图形同构的代码。它会工作正常。
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)
}
}
答案 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