#r #for-loop #igraph
#r #для цикла #igraph
Вопрос:
У меня есть некоторые данные, которые я собираюсь использовать в igraph. Для каждого образца есть два фрейма данных: один со списком ссылок, а другой со списком узлов. Igraph использует эти фреймы данных для создания сети, например.:
net1 <- graph_from_data_frame(d=sample1links, vertices=sample1nodes)
где sample1links
и sample1nodes
— разные фреймы данных.
У меня много разных образцов, поэтому было бы хорошо, если бы я мог автоматизировать этот процесс. Есть ли метод, который я могу использовать, который будет выполнять описанный выше процесс для создания всех сетей для выборок (т.Е. net1-netn, где n — количество выборок)?
Большое спасибо всем, кто может помочь!!
Комментарии:
1. Вы можете попытаться поместить все образцы dfs в список, а затем использовать
sapply()
илиMap()
.2. Спасибо за ваш ответ. Вы знаете, как я бы сказал R связать sample1links с sample1nodes, sample2links с sample2nodes и так далее в sapply или Map?
Ответ №1:
Вот пример:
library(igraph)
# 2 example graphs as data frames
sample1nodes <- read.table(text = "anbnncndne")
sample1links <- read.table(text = "a cnnb cnc d")
sample2nodes <- read.table(text = "AnBnncndne")
sample2links <- read.table(text = "A cnnB cnc d")
# create igraph objects from data frames in a list
glst <- Map(graph_from_data_frame, d=mget(ls(pattern = "sample\d links")), vertices=mget(ls(pattern = "sample\d nodes")))
names(glst) <- paste0("net", sub("sample(\d )links", "\1", names(glst))) # rename list objects
# Store list elements in the global environment under their names
list2env(glst, envir = .GlobalEnv)
# plot
par(mfrow = c(1,2))
plot(net1)
plot(net2)
Комментарии:
1. Это здорово! Спасибо за это. У меня только один вопрос, так что на данный момент это работает очень хорошо, но только до sample9. Как только выборки выражаются двузначными числами, это больше не работает. Вы знаете, почему это может быть?
2. Упс, да, вы правы — регулярное выражение должно быть
pattern = "sample\d links"
, а неpattern = "sample\dlinks"
3. Потрясающе! Большое спасибо за это!
4. Пожалуйста. Не стесняйтесь пометить вопрос как решенный (= отметьте галочкой), если ответ соответствует тому, что вы искали.