использование graph.смежности() в R
у меня есть пример кода в R следующим образом:
library(igraph)
rm(list=ls())
dat=read.csv(file.choose(),header=TRUE,row.names=1,check.names=T) # read .csv file
m=as.matrix(dat)
net=graph.adjacency(adjmatrix=m,mode="undirected",weighted=TRUE,diag=FALSE)
где я использовал CSV-файл в качестве входных данных, которые содержат следующие данные:
23732 23778 23824 23871 58009 58098 58256
23732 0 8 0 1 0 10 0
23778 8 0 1 15 0 1 0
23824 0 1 0 0 0 0 0
23871 1 15 0 0 1 5 0
58009 0 0 0 1 0 7 0
58098 10 1 0 5 7 0 1
58256 0 0 0 0 0 1 0
после этого я использовал следующую команду для проверки значений веса:
E(net)$weight
ожидаемый результат выглядит примерно так:
> E(net)$weight
[1] 8 1 10 1 15 1 1 5 7 1
, но я получаю странные значения (и каждый раз разные):
> E(net)$weight
[1] 2.121996e-314 2.121996e-313 1.697597e-313 1.291034e-57 1.273197e-312 5.092790e-313 2.121996e-314 2.121996e-314 6.320627e-316 2.121996e-314 1.273197e-312 2.121996e-313
[13] 8.026755e-316 9.734900e-72 1.273197e-312 8.027076e-316 6.320491e-316 8.190221e-316 5.092790e-313 1.968065e-62 6.358638e-316
Я не могу найти, где и что я делаю неправильно? Пожалуйста, помогите мне получить правильный ожидаемый результат, а также, Пожалуйста, скажите мне, почему этот странный выход и что тоже каждый раз отличается, когда я его запускаю.??
спасибо, Нитин!--6-->
2 ответов
проблема, по-видимому, связана с типом данных элементов матрицы. graph.adjacency
рассчитывает элементы типа numeric
. Не уверен, что это ошибка.
после этого
m <- as.matrix(dat)
установите его режим на numeric
by:
mode(m) <- "numeric"
а потом делать:
net <- graph.adjacency(m, mode = "undirected", weighted = TRUE, diag = FALSE)
> E(net)$weight
[1] 8 1 10 1 15 1 1 5 7 1
просто небольшой рабочий пример ниже, намного яснее, чем вход CSV.
library('igraph');
adjm1<-matrix(sample(0:1,100,replace=TRUE,prob=c(0.9,01)),nc=10);
g1<-graph.adjacency(adjm1);
plot(g1)
П. С. ?graph.adjacency
есть много хороших примеров (не забудьте запустить library('igraph')
).
связанные темы