Управление сетевыми данными в R

Шаблоны Инверсии управления (IoC) и Внедрения зависимости (DI) - все об удалении зависимостей от Вашего кода.

, Например, скажите, что Ваше приложение имеет компонент текстового редактора, и Вы хотите обеспечить проверку правописания. Ваш стандартный код выглядел бы примерно так:

public class TextEditor {

    private SpellChecker checker;

    public TextEditor() {
        this.checker = new SpellChecker();
    }
}

то, Что мы сделали здесь, создает зависимость между TextEditor и SpellChecker. В сценарии МОК мы вместо этого сделали бы что-то вроде этого:

public class TextEditor {

    private IocSpellChecker checker;

    public TextEditor(IocSpellChecker checker) {
        this.checker = checker;
    }
}

В первом примере кода мы инстанцируем SpellChecker (this.checker = new SpellChecker();), что означает TextEditor, класс непосредственно зависит от SpellChecker класс.

Во втором примере кода мы создаем абстракцию при наличии SpellChecker класс зависимости в [1 110] подпись конструктора (не инициализирующий зависимость в классе). Это позволяет нам звонить, зависимость тогда передают его классу TextEditor как так:

SpellChecker sc = new SpellChecker; // dependency
TextEditor textEditor = new TextEditor(sc);

Теперь клиент, создающий TextEditor, класс имеет контроль, по которому SpellChecker реализация для использования потому что мы вводим зависимость к TextEditor подпись.

Это - просто простой пример, существует хороший ряд статей Simone Busoli, который объясняет его более подробно.

10
задан Jon Seigel 7 March 2010 в 17:47
поделиться

4 ответа

Одним из вариантов является пакет network , входящий в семейство statnet пакетов R для статистического анализа социальных сетей. Он обрабатывает сетевые данные разреженным образом, что хорошо для больших наборов данных.

Ниже я делаю следующее:

  • загружаю список редактирования (первые два столбца) в сетевой объект
  • назначаю счетчики для быть атрибутом края, называемым весом.
  • Постройте сеть с помощью gplot. (См. Страницу справки для изменения толщины краев.)
  • постройте социоматрицу (просто набор блоков 5x5, представляющий матрицу смежности, где ячейка (i, j) закрашена относительным числом)
A = read.table(file="so.txt",header=T)
A
      p1 p2 counts
    1  a  b    100
    2  a  c    200
    3  a  d    100
    4  b  c     80
    5  b  d     90
    6  b  e    100
    7  c  d    100
    8  c  e     40
    9  d  e     60

library(network)
net = network(A[,1:2])
# Get summary information about your network
net
     Network attributes:
      vertices = 5 
      directed = TRUE 
      hyper = FALSE 
      loops = FALSE 
      multiple = FALSE 
      bipartite = FALSE 
      total edges= 9 
        missing edges= 0 
        non-missing edges= 9 
        Vertex attribute names: 
        vertex.names 
     adjacency matrix:
      a b c d e
    a 0 1 1 1 0
    b 0 0 1 1 1
    c 0 0 0 1 1
    d 0 0 0 0 1
    e 0 0 0 0 0

set.edge.attribute(net,"weight",A[,3])
gplot(net)

## Another cool feature
s = as.sociomatrix(net,attrname="weight")
plot.sociomatrix(s)
14
ответ дан 3 December 2019 в 20:43
поделиться

Вот как построить сетевой график данных в igraph :

d <- data.frame(p1=c('a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd'),
                p2=c('b', 'c', 'd', 'c', 'd', 'e', 'd', 'e', 'e'),
                counts=c(100, 200, 100,80, 90,100, 100,40,60))

library(igraph)
g <- graph.data.frame(d, directed=TRUE)
print(g, e=TRUE, v=TRUE)
tkplot(g, vertex.label=V(g)$name)
4
ответ дан 3 December 2019 в 20:43
поделиться

Еще я работаю в igraph. Один из способов создания графа - записать список всех узлов «от» до »в текстовый файл и прочитать его обратно как объект графа. Объект-граф может подвергаться множеству теоретико-графических процессов и может обрабатывать довольно большие сети.

0
ответ дан 3 December 2019 в 20:43
поделиться

По моему опыту, igraph - мой любимый пакет для больших теоретико-графических работ. Он эффективен с точки зрения памяти и имеет несколько очень хороших алгоритмов. igraph использует внутреннюю структуру данных типа edgelist.
Для более простых / небольших вещей я обычно использую пакет sna («анализ социальных сетей»). Он отлично подходит для интерактивной работы и построения небольших сетей. sna использует больше структуры данных матрицы смежности.

0
ответ дан 3 December 2019 в 20:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: