цикл make для создания списка объектов igraph в R - PullRequest
1 голос
/ 27 июля 2011

Я хотел бы создать список объектов Igraph с данными, используемыми для каждого объекта Igraph, определенными другой переменной.

Так я создаю один объект Igraph

netEdges <- NULL

for (idi in c("nom1", "nom2", "nom3")) {
        netEdge <- net[c("id", idi)]
        names(netEdge) <- c("id", "friendID")
        netEdge$weight <- 1
        netEdges <- rbind(netEdges, netEdge)
    }

g <- graph.data.frame(netEdges, directed=TRUE)

Для каждого уникального значения net$community Я хотел бы создать новый объект Igraph.Затем я хотел бы рассчитать показатели центральности для каждого объекта и затем вернуть эти показатели обратно в мой набор данных net.Большое спасибо за вашу помощь!

1 Ответ

1 голос
/ 27 июля 2011

Поскольку код, который вы предоставляете, не полностью воспроизводим, дальнейшее выполнение не гарантируется. Он предназначен в качестве руководства для того, как структурировать реальное решение. Если вы предоставите пример данных, которые другие могут использовать для запуска вашего кода, вы получите лучшие ответы.

Самый простой способ сделать это, вероятно, разделить net на список с одним элементом для каждого уникального значения community, а затем применить код построения графа к каждой части, сохраняя результаты для каждой части в другом списке. , Есть несколько способов сделать этот тип вещей в R, один из которых заключается в использовании lapply:

#Break net into pieces based on unique values of community
netSplit <- split(net,net$community)

#Define a function to apply to each element of netSplit
myFun <- function(dataPiece){
    netEdges <- NULL

    for (idi in c("nom1", "nom2", "nom3")) {
        netEdge <- dataPiece[c("id", idi)]
        names(netEdge) <- c("id", "friendID")
        netEdge$weight <- 1
        netEdges <- rbind(netEdges, netEdge)
    }

    g <- graph.data.frame(netEdges, directed=TRUE)
    #This will return the graph itself; you could change the function
    # to return other values calculated on the graph
    g
}

#Apply your function to each subset (piece) of your data:
result <- lapply(netSplit,FUN = myFun)

Если все прошло хорошо, result должен быть списком, содержащим график (или что вы изменили myFun для возврата) для каждого уникального значения community. Другие популярные инструменты для выполнения подобных задач включают ddply из пакета plyr.

...