Ошибка при попытке загрузить формат dl с помощью igraph - PullRequest
1 голос
/ 10 марта 2020

Я пытаюсь загрузить минимальный набор данных kapferer в r с помощью функции igraph "read_graph"

Код очень прост, однако выдает ошибку.

test_g <-read_graph("http://vlado.fmf.uni-lj.si/pub/networks/data/ucinet/kapmine.dat", format = "dl")

Ошибка в read.graph.dl (файл, ...): на внешнем. c: 3050: синтаксическая ошибка, неожиданный конец $, ожидающий DL в строке 1, ошибка разбора

То же самое можно увидеть, перейдя по ссылке, в которой файл начинается с DL. Единственная подсказка, которую я могу найти в этом, - это сообщение от 2015 , в котором в основном говорится о том, как подать отчет об ошибке.

Может ли dl-файлы не загружаться с помощью igraph в данный момент, или есть какой-то трюк, чтобы это?

1 Ответ

0 голосов
/ 17 марта 2020

Поскольку не существует четкого способа загрузки dl-файлов, я создал загрузчик, который, похоже, хорошо работает для dl-графика на веб-сайте Pajek . Эта функция немного неудобна и не была тщательно протестирована, но она может быть полезна для тех, кто хочет использовать определенные графики, которые недоступны в более распространенном формате. Если имеется более актуальная информация об этих наборах данных, этот код можно игнорировать.

load_dl_graph <- function(file_path, directed){

  raw_mat <- readLines(file_path) %>%
  enframe()

row_labels_row <- grep( "ROW LABELS:", raw_mat$value)
column_labels_row <- grep( "COLUMN LABELS:", raw_mat$value)
level_labels_row <- grep("LEVEL LABELS:",raw_mat$value )
data_table_row <- grep( "DATA:", raw_mat$value)


row_labels <- raw_mat %>%
  slice((row_labels_row+1):(column_labels_row-1)) %>%
  select(from = value)

column_labels <- raw_mat %>%
  slice((column_labels_row+1):(level_labels_row-1)) %>% pull(value)

table_levels <- raw_mat %>%
  slice((level_labels_row+1):(data_table_row+-1)) %>% pull(value)

data_df <- raw_mat %>%
  slice((data_table_row+1):nrow(.)) %>%
  select(value) %>%
  mutate(value = str_squish(value)) %>%
  separate(col = value, into = column_labels, sep = " ") %>%
  mutate(table_id = rep(1:length(table_levels), each = nrow(.)/length(table_levels)))

tables_list <- 1:length(table_levels) %>%
  map(~{

    data_df %>%
      filter(table_id ==.x) %>%
      select(-table_id) %>%
      bind_cols(row_labels,.) %>%
      pivot_longer(cols = 2:ncol(.), names_to = "to", values_to = "values") %>%
      filter(values ==1) %>%
      select(-values) %>%
      graph_from_data_frame(., directed = directed)

  })

names(tables_list) <- table_levels

return(tables_list)

}
...