R语言igraph包如何传入字符串至graph_from_literal创建图对象
解决方案
你可以通过parse()将字符串转换为R表达式,再用eval()执行的方式实现需求,不需要手动拆分字符串处理边逻辑,完全复用graph_from_literal本身的解析规则:
1. 基础示例(单个字符串转图)
library(igraph) # 字符串格式的边定义 str_edge <- "A-B" # 构造表达式并执行 g <- eval(parse(text = paste0("graph_from_literal(", str_edge, ")"))) # 验证和字面量创建的图完全一致 identical_graphs(graph_from_literal(A-B), g) # [1] TRUE
你之前尝试的cat、noquote仅会修改打印时的显示效果,变量本身还是字符串类型,无法被graph_from_literal识别,而parse+eval是直接把字符串转换为可执行的R表达式,刚好匹配函数的入参要求。
2. 具体场景实现代码
# 输入数据 input_vec <- c('0.1', '0.1.1', '0.1.2', '0.11', '0.12', '0.11.1', '0.12.1', '0.12.2') # 点替换为横杠 transformed_edges <- gsub("\\.", "-", input_vec) # 拼接为完整的函数调用表达式 call_expr <- paste0("graph_from_literal(", paste(transformed_edges, collapse = ", "), ")") # 执行生成图对象 result_g <- eval(parse(text = call_expr)) # 查看结果 result_g # 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
运行结果和预期的字面量创建的图完全一致。
内容的提问来源于stack exchange,提问作者zx8754
相关产品推荐
相关产品推荐

