Использование igraph для нескольких графиков в R

Если, скажем, у меня есть графики с именем w1 w2 w3 w4 .............. w100, и всего таких графиков 100, и если я хочу вычислить modularity этих графиков, то можно ли как-то написать функцию, чтобы она вычисляла модульность каждого графика и возвращает числовой вектор, или нам придется вручную вычислять его для каждого файла (так, как я делаю это прямо сейчас)?

Код для создания графиков, который я использовал:

wt=read.table("NP7.txt")
wt1=matrix(nrow=nrow(wt), ncol=2)     
wt1=data.frame(wt1)
wt1[,1:2]=wt[,1:2]      
write.table(wt1,"test.txt")
library(igraph)
wt=read.table("test.txt")
wg7 <- graph.edgelist(cbind(as.character(wt$X1), as.character(wt$X2)),
                 directed=F)
sum(clusters(wg7)$csize>2)        
plot(wg7)

У меня есть около 100 файлов, таких как NP1.txt NP2.txt ........... NP100.txt, из которых я должен сделать графики. И в настоящее время я сохраняю имя графика как wg1 wg2 wg3 ............. wg100.


person user3797829    schedule 22.07.2014    source источник
comment
Вы, вероятно, должны хранить все свои графики в списке. Тогда вы могли бы легко просмотреть список. Как вы создаете все эти объекты?   -  person MrFlick    schedule 22.07.2014
comment
@MrFlick, все эти графики я сделал из разных наборов данных, которые я сначала отсканировал с помощью read.table, а затем построил графики.   -  person user3797829    schedule 22.07.2014
comment
Что ж, вам, вероятно, также следует просмотреть список файлов для чтения. Иметь кучу разных переменных, загромождающих глобальную среду, не имеет особого смысла. Особенно, когда вы хотите работать с ними как со связанными объектами.   -  person MrFlick    schedule 22.07.2014
comment
@MrFlick, как я могу это сделать? lapply(bunch of file names) ?   -  person user3797829    schedule 22.07.2014
comment
Как говорит @MrFlick из #R, вы определенно можете использовать lapply или другую функцию *apply. Я пытаюсь написать решение, но если у вас есть пример кода, чтобы дать мне графики для работы, это было бы очень полезно.   -  person Hack-R    schedule 22.07.2014
comment
Покажите полный код, который вы используете для одного графика.   -  person jlhoward    schedule 22.07.2014
comment
@NerdLife, на самом деле у меня есть 100 .txt файлов, NP1.txt NP2.txt NP3.txt ......... NP100.txt из которых я делаю графики. А затем те графы, которые я назвал wp1 wp2 wp3 wp4 ....... wp100, модульность которых я должен вычислить.   -  person user3797829    schedule 22.07.2014
comment
@jlhoward, обновил пост, чтобы показать, как я строю графики. :)   -  person user3797829    schedule 22.07.2014
comment
@user3797829 user3797829 спасибо, хотя я имел в виду что-то воспроизводимое, что я мог бы запустить в R (возможно, со встроенным или общедоступным источником данных), чтобы привести мне пример. Впрочем, это не имеет большого значения, мы сможем помочь вам и без этого.   -  person Hack-R    schedule 22.07.2014


Ответы (1)


Таким образом, похоже, что в ваших текстовых файлах есть списки краев без строки заголовка. Тогда это должно быть довольно близко.

library(igraph)
files <- paste0("NP",1:100,".txt")
f.mod <- function(file) {
  w <- read.table(file)
  g <- graph.edgelist(cbind(as.character(w$V1),as.character(w$V2)))
  plot(g)
  wtc <- walktrap.community(g)
  return(modularity(wtc))
}
mods <- sapply(files,f.mod)

Если вам нужен список графиков, то сделайте это так:

get.igraph <- function(file) {
  w <- read.table(file)
  g <- graph.edgelist(cbind(as.character(w$V1),as.character(w$V2)))
}
graphs <- lapply(files,get.igraph)
lapply(graphs,plot)
mods   <- sapply(graphs,function(g)modularity(walktrap.community(g)))
person jlhoward    schedule 22.07.2014
comment
Привет! Это сработало. Но у меня есть два сомнения. Я не думаю, что это составляет список графиков, которые я могу видеть, например, как я делал ранее, plot(wg7). Кроме того, я вычисляю модульность, выполняя что-то вроде wtc <- walktrap.community(wg7), а затем выполняя modularity(wtc). Я думаю, что это делается как-то по-другому. - person user3797829; 22.07.2014
comment
Верно. Я размышлял о том, что было в вашем коде, который не вычисляет модульность. Смотрите правки. - person jlhoward; 22.07.2014
comment
это работает идеально. Я просто хотел знать, как я могу получить доступ к отдельным графикам? То, что он делает в основном прямо сейчас, это создает эти графики, но он просто спешит через все графики, которые создаются. Как я могу получить к ним доступ позже? Пример: если я хочу увидеть график NP4.txt, как я могу это сделать? - person user3797829; 22.07.2014
comment
Используя второй блок кода, где graphs — это список графиков, вы можете ссылаться на графики, например, как graphs[[4]]. Обратите внимание на использование двойных скобок. Итак, plot(graphs[[4]]). - person jlhoward; 22.07.2014