【问题标题】:Error when trying to load dl format using igraph尝试使用 igraph 加载 dl 格式时出错
【发布时间】:2020-03-10 18:35:13
【问题描述】:

我正在尝试使用 igraph 函数“read_graph”将kapferer min dataset 加载到 r 中

代码很简单,但是会报错。

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

read.graph.dl(file, ...) 中的错误:在 foreign.c:3050:语法 错误,意外的 $end,期望 DL 在第 1 行,解析错误

通过以下链接可以看到该文件确实以 DL 开头。我能找到的唯一线索是message from 2015,它基本上说是提交错误报告。

现在igraph不能加载dl文件吗,还是有什么窍门?

【问题讨论】:

  • 文档 (igraph.org/r/doc/read_graph.html) 确实说“现在支持 as_edgelist、pajek、graphml、gml、ncol、lgl、dimacs 和 graphdb” - 所以不支持 dl
  • 很公平,旧的文档的第一部分说的是一件事,其余的部分说的是另一件事。我应该都读完了。
  • 文档中没有提到 DL 似乎是一个错误,因为实现了read.graph.dl。正如comment 所说,读取 DL 文件的功能只是初级功能。
  • 我猜是因为没有明确的标准,装载机有点碰碰运气。

标签: r igraph


【解决方案1】:

由于似乎没有一种明确的方式来加载 dl 文件,我制作了一个似乎适用于 Pajek website 上的 dl 图的加载器。该功能有点杂乱无章,尚未经过广泛测试,但它可能对一些想要使用某些图表的人有用,而这些图表以更常见的格式不可用。如果有更多关于这些数据集的最新信息,则可以忽略此代码。

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)

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-02
    • 2015-08-04
    • 1970-01-01
    • 1970-01-01
    • 2020-01-04
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多