【发布时间】:2021-09-20 09:44:29
【问题描述】:
我们可以传递文字来制作如下图:
# R version 4.0.2 (2020-06-22)
library(igraph) # igraph_1.2.6
graph_from_literal(A-B)
# IGRAPH 7e5604a UN-- 2 1 --
# + attr: name (v/c)
# + edge from 7e5604a (vertex names):
# [1] A--B
认为传递字符串会起作用,但事实并非如此。 (这是一个小例子"A-B",想象一个很长的复杂字符串):
graph_from_literal("A-B")
# IGRAPH 8b32703 UN-- 1 0 --
# + attr: name (v/c)
# + edges from 8b32703 (vertex names):
# objects are not the same
identical_graphs(graph_from_literal(A-B),
graph_from_literal("A-B"))
# [1] FALSE
要么我使用了错误的函数,要么我需要另一个函数来删除引号。 cat,noquote 不起作用。想法?
编辑 1: 我想避免字符串操作:将“A-B”拆分为“from”和“to”,然后使用 graph_from_dataframe。例如,对于 "A-B-C" 的简单输入,拆分为 2 列不起作用。
编辑 2: 动机来自 another question,我认为我可以使用 igraph 包作为解决方案。我用破折号替换了点,想将该字符串转换为图形对象,但意识到 literal 不喜欢字符串输入。
那么更长的问题:我如何将下面的转换为图形对象?
# input
c('0.1', '0.1.1', '0.1.2', '0.11', '0.12', '0.11.1', '0.12.1', '0.12.2')
# expected output:
graph_from_literal(0-1, 0-1-1, 0-1-2, 0-11, 0-12, 0-11-1, 0-12-1, 0-12-2)
# IGRAPH 0792a00 UN-- 5 7 --
# + attr: name (v/c)
# + edges from 0792a00 (vertex names):
# [1] 0--1 0--11 0--12 1--2 1--11 1--12 2--12
编辑 3:现在有一个相关的开放GitHub issue 475 来解决此功能。
【问题讨论】:
-
你能否激发这个请求并解释为什么你想把它写成一个字符串而不是一个表达式?
graph_from_literal的目的是能够快速创建图表以进行实验。期望您手动输入表达式。然后,据我所知,您输入的内容是否带引号都没有关系。 -
@Szabolcs 请参阅“编辑 2”。
-
感谢您的解释。关于向 R/igraph 添加字符串支持的讨论是here。随意发表评论。就个人而言,我认为提议的应用程序是一个 hack(一个非常方便的 hack,但仍然是一个 hack,因为它与
graph_from_literal的预期用途不一致)。 -
@Szabolcs 太好了,我也想在 GitHub 上发布它。现在有了编辑,并且有这个帖子的活跃问题链接,希望“动机”很清楚。