使用Ifelse时Igraph无效索引错误

时间:2017-12-01 09:12:35

标签: r if-statement indexing error-handling igraph

我有两个节点向量:

bad_node_pair
+ 2/2 vertices, named:
[1] 1949 1967

remaining_nodes
+ 5/? vertices, named:
[1] 1947 1948 1949 1967 1968

我测试bad_node_pair中是否存在remaining_nodes,如果存在,则返回显示的内容:

bad_node_pair[names(bad_node_pair) %in% names(remaining_nodes)]
+ 2/2 vertices, named:
[1] 1949 1967

然而,当我把它放在循环中时,我得到:

ifelse(
  bad_node_pair[names(bad_node_pair) %in% names(remaining_nodes)], 
       print(1), 
       print(0)
       )
[1] 1
Error in `[<-.igraph.vs`(`*tmp*`, test & ok, value = c(1, 1)) : 
  invalid indexing

它会打印答案,但会抛出该错误。

发生了什么事?

坏节点的数据:

df1 <- read.table(header=T, text=" from   to
8 1949 1967")
bad_g <- graph.data.frame(df1, directed=FALSE)
bad_node_pair <- V(bad_g)

良好节点的数据:

df2 <- read.table(header=T, text=" from   to
1 1947 1948
2 1947 1949
3 1947 1967
4 1947 1968
5 1948 1949
6 1948 1967
7 1948 1968
8 1949 1968")
g <- graph.data.frame(df2, directed=FALSE)
remaining_nodes <- V(g)

1 个答案:

答案 0 :(得分:1)

如果要使用ifelse,则必须传递逻辑参数:

ifelse(any(bad_node_pair[names(bad_node_pair) %in% names(remaining_nodes)]), 1, 0)
[1] 1

或者:

ifelse(names(bad_node_pair) %in% names(remaining_nodes), 1, 0)
[1] 1 1

取决于您想要获得的内容(我不确定我是否正确理解您的问题)