You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何单独运行函数代码行正常,整函数运行却报错?

问题:R函数调用时出现"object 'census_info' not found"错误

我编写了一个脚本,通过多个函数将不同国家的数据集标准化为统一格式。批量运行代码时出现错误,但单独执行FormatTMtCensusData函数内的代码后,再运行主函数就能正常工作。

主脚本代码

machine <- ajs
database.code <- "NOR"

#1. 导入数据集——此部分运行无问题
orig.data.list <- LoadTMtOriData (database.code, machine = machine, team.qc = F)

#2. 转换数据格式
tmt.data.list <- Conver2TMtData (orig.data.list, database.code = database.code, machine = machine)

报错信息

Error in FormatTMtCensusData(tree = tree_test, database.code = "NOR") : 
  object 'census_info' not found

Conver2TMtData函数代码

Conver2TMtData <- function (orig.data.list, database.code, machine) {

td1 <- orig.data.list [[1]]; spp1 <- orig.data.list [[2]]; 

if (database.code == 'NOR') {
    tree <- FormatTMtTreeData (td = td1, spp = spp1, md = md1, database.code = 'NOR')
    write.csv(tree, "/Users/ajdinstarcevic/OneDrive - University of Eastern Finland/UEF/WUR/WORK/Mortality model/Data/NOR/tree.csv")
    spp <- FormatTMtSppData (tree, database.code = 'NOR')
    tree_test <- tree
    census_info <- FormatTMtCensusData (tree=tree_test, database.code = 'NOR') 
    
    
  }
}

FormatTMtCensusData函数代码

FormatTMtCensusData <- function (tree, database.code) {

if (database.code == 'NOR') {
   census_info <- unique (tree[,c('database.code','tmt.census.id','census.id', 'census.date','census.n','tmt.plot.id','plot.id')])
   census_info$census.contact <- 'NA'
    census_info$census.contact.email <- 'NA'
    
    
 }
}

问题原因

FormatTMtCensusData函数内部创建了census_info对象,但没有返回该对象。批量运行时,函数执行完毕后内部环境销毁,census_info不会传递给调用它的Conver2TMtData函数;而单独运行函数内的代码时,census_info会被创建在全局环境中,后续调用Conver2TMtData时能读取到这个全局变量,因此不会报错。

解决方案

修改FormatTMtCensusData函数,确保它返回census_info对象。有两种方式:

  1. 在函数末尾添加return(census_info):
FormatTMtCensusData <- function (tree, database.code) {

if (database.code == 'NOR') {
   census_info <- unique (tree[,c('database.code','tmt.census.id','census.id', 'census.date','census.n','tmt.plot.id','plot.id')])
   census_info$census.contact <- 'NA'
    census_info$census.contact.email <- 'NA'
    
 }
 return(census_info)
}
  1. 直接将census_info作为函数的最后一行(R函数默认返回最后一行的结果):
FormatTMtCensusData <- function (tree, database.code) {

if (database.code == 'NOR') {
   census_info <- unique (tree[,c('database.code','tmt.census.id','census.id', 'census.date','census.n','tmt.plot.id','plot.id')])
   census_info$census.contact <- 'NA'
    census_info$census.contact.email <- 'NA'
    
 }
 census_info
}

同时建议处理database.code不为'NOR'的情况,避免返回NULL导致后续出错,比如可以添加默认返回值:

FormatTMtCensusData <- function (tree, database.code) {
  census_info <- NULL
  if (database.code == 'NOR') {
     census_info <- unique (tree[,c('database.code','tmt.census.id','census.id', 'census.date','census.n','tmt.plot.id','plot.id')])
     census_info$census.contact <- 'NA'
      census_info$census.contact.email <- 'NA'
      
   }
  census_info
}

内容的提问来源于stack exchange,提问作者starski

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 12:15:39