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
代替oc
c
,或者您可以使用
节点(averaged)
直接获取节点。如果这不起作用,你能添加一个可复制的例子吗,比如说使用一个包数据集,它甚至比我的解决方案更好,因为它一开始不会造成向量中NA数据的问题。在我的例子中,它是有效的,因此使用
节点(平均值)
而不是
唯一的(c(弧(平均值))
,但是应该有一个存储多个网络的数据结构(对于
平均值
唯一的(c(弧(平均值)))
。然后必须使用
c
等。为什么您的一些节点是NA?它们不应该是,也不是。我只是有两种不同的数据类型,当它们在
relevant.nodes=nodes(averaged)[sapply(nodes,degree,object=averaged)>0]处“合并”时,不知怎么搞砸了向量。
relevant.nodes = relevant.nodes[!is.na(relevant.nodes)]