在R语言中通过循环调用函数并存储igraph对象的问题
嘿,我来帮你搞定这个问题!你遇到的object 'g' not found错误,核心问题是循环里每次都把readFn(i)的结果覆盖到同一个g变量上——如果某次调用函数返回异常,最后g就可能不存在;就算没报错,你最后也只能拿到最后一个文件对应的图,没法保留两个结果。另外你想要生成g_345和g_456这样的命名对象,这里有两种靠谱的方案:
方案1:用列表存储(推荐)
这种方式更符合R的编程习惯,后续批量处理这些igraph对象也更方便,不会把全局环境搞得乱糟糟:
files <- c("345","456") # 先初始化一个空列表 graph_list <- list() for(i in files){ # 把每个文件对应的图存入列表,用文件名作为列表元素的名字 graph_list[[i]] <- readFn(i) } # 之后可以通过名字直接访问对应的图 graph_list[["345"]] graph_list[["456"]]
方案2:直接创建命名对象
如果你一定要生成g_345和g_456这种独立变量,可以用R的assign()函数,它能在全局环境里创建指定名字的变量:
files <- c("345","456") for(i in files){ # 构造目标变量名,比如拼接成"g_345" var_name <- paste0("g_", i) # 创建这个变量并赋值为readFn的返回结果 assign(var_name, readFn(i)) } # 现在你就能直接使用g_345和g_456了 g_345 g_456
额外小提示
- 先单独测试你的
readFn函数,比如运行readFn("345"),确认它确实能返回有效的igraph对象,排除函数本身的问题。 - 关于你看到的警告信息,运行
warnings()就能查看具体内容,大概率是readFn内部处理文件时的提示(比如缺失值、格式不兼容等),可以根据警告内容调整函数里的逻辑。
内容的提问来源于stack exchange,提问作者pranav nerurkar
相关产品推荐
相关产品推荐

