R語言 關鍵節點問題 方案二

2021-08-03 05:46:34 字數 1748 閱讀 4230

緊接方案一

由於方案一每次輸出乙個權重最高結點,然原始網路規模達100w,到假設一秒輸出乙個結點也約需要277小時,到中間階段,有很多結點具有相同的權重。

因此做效能優化,每次輸出權重最大的全部結點,預計可以吧時間縮短在3小時以內。

缺點是同屬最大權重的結點間可能相關,導致結果不是特別精準,尤其隨著權重變小,規模變大,尤其明顯,所以設定當最大權重為5的時候停止輸出。

實現**:

library(dplyr)

library(rmysql) # 載入rmysql包

conn <- dbconnect(mysql(),dbname = "networks",username = "root") # 建立資料庫連線

dbsendquery(conn, "set @@sql_mode=ansi;") # 啟動非嚴格模式

dbsendquery(conn, "set names gbk") # win7環境下如果漢字亂碼,就執行這條命令

res <- dbsendquery(conn, "select * from nodeweight1")

dat <- dbfetch(res, n=-1) #n=-1表示取所有資料,n=2表示取2條資料

res1 <- dbsendquery(conn, "select * from nodemap1")

dat1 <- dbfetch(res1, n=-1) #n=-1表示取所有資料,n=2表示取2條資料

output <- data.frame(nodeid = 0,weight = 0,seq = 0) #建立空的輸出序列

output <- output[-1,] #清空資料

node_cnt <- 0 #已經輸出的結點數量

for (i in 1:nrow(dat))

node_del <- dat$nodeid[dat$weight==max_weight] #權重最大的結點編號,有多個全部輸出

node_rel <- data.frame(nodeid = 0,weight = 0) #初始化

node_rel <- node_rel[-1,]

#迴圈刪除最大權重結點資訊

for (m in 1:length(node_del))

node_rel <- summarise(group_by(node_rel, nodeid),count = n()) #group by

#迴圈更新關聯結點權重

for (n in 1:length(node_rel))

output <- rbind(output, cbind(nodeid=node_del, weight=max_weight, seq=i) ) #輸出本輪最大結點資訊

node_cnt = node_cnt+m

cat("weight:",max_weight,"\tnode number:",m,"\tnode count:",node_cnt,"\tnode release:",nrow(dat),"\n") #頁面輸出

if (max_weight <= 35) #當權重小於35時才儲存檔案

}

R語言入門(二)

今天看到乙個好的系列部落格,在此推薦 這部分主要介紹r語言的幾種資料結構。r語言的資料結構為向量 矩陣 陣列 資料框 列表。向量主要是用來儲存數值型 1,2,3 字元型 abc efg 或者邏輯型 true false 資料的一維陣列。我們可以用函式c 來建立向量。如下 a c 1,2,3,3,4,...

R語言筆記(二

因子 factor 元素型別可以不同 df data.frame id c 1,2,3,4 name c a b c d df id name 1 1 a 2 2 b 3 3 c 4 4 d nrow df 1 4 ncol df 1 2 data.matrix df 轉換為矩陣 id name 1...

R語言第二講

web packages有一些錯誤是r的初學者和經驗豐富的r程式設計師都可能常犯的。如果程式出錯了,請檢查 以下幾方面。使用了錯誤的大小寫。help help 和help 是三個不同的函式 只有第乙個 是正確的 忘記使用必要的引號。install.packages gclus 能夠正常執行,然而in...