Я много искал в огромном количестве информации stackoverflow, чтобы найти решение, но я застрял! Я изучаю R и igraph, читая и делая, поэтому, пожалуйста, потерпите меня, если вопрос слишком простой :)
Я использовал этот приведенный ниже код для извлечения текстовых данных (список смежности) соавторства со страниц профиля ученого Google, и я хотел превратить его в сети соавторства, но мне не удалось использовать graph_from_adjlist в Igraph; сеть строилась неправильно, поэтому я изменил свой подход и попытался сначала превратить их в edgelist, а затем использовать более распространенную функцию graph_from_edgelist, я нашел решение здесь; он отлично работает, когда количество строк (в моем случае публикаций) меньше 300, но для большего количества он дает эту ошибку в R:
Error in rep(x[1], length(x) - 1) : invalid 'times' argument
Called from: FUN(X[[i]], ...)
Browse[1]> Q
Честно говоря, я не знаю логики кода превращения столбцов списка смежности в 2-столбцовый edgelist, и мне не удалось выяснить, что не так.
Вот мой небольшой фрагмент кода (я описал каждый шаг во встроенных комментариях):
library(scholar)
library(igraph)
# one scholar profile link (works fine with small number of authors)
scurl <- "https://scholar.google.com/citations?user=nG42BMAAAAAJ&hl=en"
# prof Welman google scholar link as an example that gives the above error
# scurl <- "https://scholar.google.com/citations?user=_q2NODAAAAAJ&hl=en"
citid <- strsplit((strsplit(scurl,"&",fixed = TRUE)[[1]][1]),"=",fixed = TRUE)[[1]][2]
# authors <- as.data.frame(cSplit(subset(get_publications(citid,flush = TRUE),select = "author"),splitCols = "author",sep = ",")) ## this I put to check if authors are extracting in a right way
pub <- get_publications(citid,flush = TRUE)
coauthors <- as.character(tolower(pub$author)) ##to make text differences less effective in result
adjlist=strsplit(coauthors,",") # splits the character strings into list with different vector for each line
col1 <- unlist(lapply(adjlist,function(x) rep(x[1],length(x)-1))) # establish first column of edgelist by replicating the 1st element (=ID number) by the length of the line minus 1 (itself)
col2 <- unlist(lapply(adjlist,"[",-1)) # the second line I actually don't fully understand this command, but it takes the rest of the ID numbers in the character string and transposes it to list vertically
edgelist <- cbind(col1,col2) # creates the edgelist by combining column 1 and 2.
coauthorgraph <- graph_from_edgelist(edgelist,directed = FALSE)
set.seed(333)
coauthorgraph$layout <- layout.circle
tkplot(coauthorgraph)
Я попытался добавить условие (раз = 400) в строку col2, но это не помогло. Буду очень благодарен за любой совет.