Поскольку код, который вы предоставляете, не полностью воспроизводим, дальнейшее выполнение не гарантируется. Он предназначен в качестве руководства для того, как структурировать реальное решение. Если вы предоставите пример данных, которые другие могут использовать для запуска вашего кода, вы получите лучшие ответы.
Самый простой способ сделать это, вероятно, разделить 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
.