2017-08-15 53 views
0

我在這裏丟失了什麼?我已經清理了工作區並重新啓動了會話。這是我的代碼似乎造成麻煩的一部分。我試圖從強度對象平均的貝葉斯網絡弧長處,然後保存的所有節點均圖,然後計算相關節點,保存爲字符串的載體:R blearn - 子圖函數錯誤:節點必須是字符串的向量

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. 

這是我relevant.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 

當我檢查的地方,在那裏此錯誤消息被拋出的源代碼,我發現如果-statem ENT(Link

# nodes must be a vector of character strings. 
    if (!is(nodes, "character")) 
    stop("nodes must be a vector of character strings, the labels of the nodes.") 

並運行它:

(!is(relevant.nodes, "character")) 

,其結果是

[1] FALSE 

是否有人有想法?我對R很陌生,但仍然發現自己只是在昨天才瞭解=<-之間的區別,所以請不要對我太苛刻。

+0

我認爲問題可能是行'nodes.averaged = ...'。你使用'unlist'做任何事情,因爲'averaged'是一個矩陣。嘗試使用'nodes.averaged = unique(c(arcs(averaged)))'或'as.vector'來代替oc'c',或者您可以使用'nodes(averaged)'直接獲取節點。如果這不起作用,可以添加一個可重複使用的示例,比如使用其中一個包數據集 – user20650

+0

這比我的解決方案更好,因爲它首先不會在矢量中創建NA數據。在我的情況下,它的工作原理是,使用'nodes(averaged)'而不是'unique(c(arcs(averaged)))',但是應該有一個數據結構存儲多個網絡('average'at'unique c(arcs(averaged)))''然後你必須使用'c'等 – Phise

回答

1

我發現我的錯誤...字符串的向量不允許有任何空的數據。這已經做到了:

relevant.nodes = relevant.nodes[!is.na(relevant.nodes)] 
+0

爲什麼你的一些節點是NA? – user20650

+0

他們不應該,他們不是,我只有兩種不同的數據類型當它們在'relevant.nodes = nodes(averaged)[sapply(nodes,degree,object = averaged)> 0]「合併」時,它以某種方式搞砸了這個向量。 – Phise

相關問題