R blearn-子图函数错误:节点必须是字符串向量
我错过了什么?我已经清理了工作区并重新启动了会话。下面是我的代码中似乎引起麻烦的部分。我试图对一个强度对象的贝叶斯网络弧强度进行平均,然后保存该平均图的所有节点,然后计算相关节点,保存为字符串向量:R blearn-子图函数错误:节点必须是字符串向量,r,bnlearn,R,Bnlearn,我错过了什么?我已经清理了工作区并重新启动了会话。下面是我的代码中似乎引起麻烦的部分。我试图对一个强度对象的贝叶斯网络弧强度进行平均,然后保存该平均图的所有节点,然后计算相关节点,保存为字符串向量: averaged = averaged.network (strength) nodes.averaged = unique(unlist(arcs(averaged))) relevant.nodes = nodes(averaged)[sapply(nodes.averaged, degree,
averaged = averaged.network (strength)
nodes.averaged = unique(unlist(arcs(averaged)))
relevant.nodes = nodes(averaged)[sapply(nodes.averaged, degree, object = averaged) > 0]
averagedNew = subgraph(averaged,relevant.nodes)
然后我得到这个错误:
Error in check.nodes(nodes, graph = x, max.nodes = length(x$nodes)) :
nodes must be a vector of character strings, the labels of the nodes.
这是我的相关节点:
[1] "V81" "V97" "V114" "V55" "V93" "V119" "V102" "V23" "V24" "V76" "V67" "V29" "V33" "V84" "V89" "V73"
[17] "V82" "V71" "V45" "V7" "V21" "V109" "V5" "V41" "V65" "V118" "V6" "V20" "V100" "V15" "V59" "V94"
[33] "V57" NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[49] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[65] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
[81] NA NA NA NA NA NA NA NA NA NA
当我检查抛出此错误消息的位置的源代码时,我找到了if语句()
然后运行它:
(!is(relevant.nodes, "character"))
结果是
[1] FALSE
有人有主意吗?我对R相当陌生,但仍然发现自己在学习
=
和之间的区别时发现了我的错误。。。字符串向量不允许有任何空数据。这就成功了:
relevant.nodes = relevant.nodes[!is.na(relevant.nodes)]
我认为问题可能是行nodes.averaged=…
。您使用unlist
,它做任何事情,因为平均值
是一个矩阵。尝试使用nodes.averaged=unique(c(弧(averaged))
,或as.vector
代替occ
,或者您可以使用节点(averaged)
直接获取节点。如果这不起作用,你能添加一个可复制的例子吗,比如说使用一个包数据集,它甚至比我的解决方案更好,因为它一开始不会造成向量中NA数据的问题。在我的例子中,它是有效的,因此使用节点(平均值)
而不是唯一的(c(弧(平均值))
,但是应该有一个存储多个网络的数据结构(对于平均值
在唯一的(c(弧(平均值)))
。然后必须使用c
等。为什么您的一些节点是NA?它们不应该是,也不是。我只是有两种不同的数据类型,当它们在relevant.nodes=nodes(averaged)[sapply(nodes,degree,object=averaged)>0]处“合并”时,不知怎么搞砸了向量。
relevant.nodes = relevant.nodes[!is.na(relevant.nodes)]