我有一个.tsv文件,类似于下面给出的示例。
index GLWSKIKEVGKEAAKA GLFDIIKKIAESI GLLDIVKKVVGAFGSL GLFDIVKKVVGALGSL
GLWSKIKEVGKEAAKA 33 7 10 11 9 9 11 10
GLFDIIKKIAESI 7 13 8 9 8 9 11 11
GLLDIVKKVVGAFGSL 10 8 16 14 13 11 11 10
GLFDIVKKVVGALGSL 11 9 14 16 14 12 12 11
文件读取完美:
m <- read.table("out_1.csv", sep=",",header=TRUE, row.names='index')
尝试使用下面给出的库构建网络图。
library(igraph)
ig <- graph.adjacency(m, mode="undirected", weighted=TRUE)
引发错误
Error in mde(x): 'list' object cannot be coerced to type 'double'
Traceback:
1. graph.adjacency(m, mode = "undirected", weighted = TRUE)
2. graph.adjacency.dense(adjmatrix, mode = mode, weighted = weighted,
. diag = diag)
3. `mode<-`(`*tmp*`, value = "double")
如何解决这个问题
帮助页面说你需要一个方形邻接矩阵。
您的示例中有一个包含8列和4行的data.frame
。
(我假设您的标题中有空列,这些列不会显示在粘贴的文本中。
这将起作用:
m <- as.matrix(read.table("out_1.csv", sep=",", header=TRUE, row.names='index')[, 1:4])
library(igraph)
ig <- graph.adjacency(m, mode="undirected", weighted=TRUE)
ig
#> IGRAPH 80e1470 UNW- 4 10 --
#> + attr: name (v/c), weight (e/n)
#> + edges from 80e1470 (vertex names):
#> [1] GLWSKIKEVGKEAAKA--GLWSKIKEVGKEAAKA GLWSKIKEVGKEAAKA--GLFDIIKKIAESI
#> [3] GLWSKIKEVGKEAAKA--GLLDIVKKVVGAFGSL GLWSKIKEVGKEAAKA--GLFDIVKKVVGALGSL
#> [5] GLFDIIKKIAESI --GLFDIIKKIAESI GLFDIIKKIAESI --GLLDIVKKVVGAFGSL
#> [7] GLFDIIKKIAESI --GLFDIVKKVVGALGSL GLLDIVKKVVGAFGSL--GLLDIVKKVVGAFGSL
#> [9] GLLDIVKKVVGAFGSL--GLFDIVKKVVGALGSL GLFDIVKKVVGALGSL--GLFDIVKKVVGALGSL