代码之家  ›  专栏  ›  技术社区  ›  monkey

R中的trycatch范围

  •  0
  • monkey  · 技术社区  · 2 年前

    以下代码行为不端。当我在RStudio内部运行它来测试它时,它很好。我得到了custom_vars的一个值,这是有意义的。当我尝试使用Knit运行此代码时,它每次都会返回错误。

    我试过在custom_vars的范围内玩aorund,但也不起作用。

    report_params <- "-summary-private-room-tenure-minmax-map-Analyse newVar group-Analyse oldVar group"
    
    custom_vars <- tryCatch(
    {
      a <- report_params
      a <- as.list(strsplit(a, "-")[[1]])
      a <- str_subset(a, pattern = "Analyse.*.group")
      
      if (length(a) > 0) {
        a <- sapply(strsplit(a, split=' group'  , fixed=TRUE), function(x) (x[1]))
        a <- sapply(strsplit(a, split='Analyse ', fixed=TRUE), function(x) (x[2]))
        custom_vars <- c(a)   # no return in try code!
      } else {
        ret <- c("zero legth")
        return( ret ) 
      }
    }, error=function(e) {
        ret <- c("error")
        return( ret ) 
      }
    )
    

    如果我把试捕的东西剪掉,它又能正常工作。我想的都试过了。这毫无意义。

      a <- params$report_params
      a <- as.list(strsplit(a, "-")[[1]])
      a <- stringr::str_subset(a, pattern = "Analyse.*.group")
      
      if (length(a) > 0) {
        a <- sapply(strsplit(a, split=' group'  , fixed=TRUE), function(x) (x[1]))
        a <- sapply(strsplit(a, split='Analyse ', fixed=TRUE), function(x) (x[2]))
        custom_vars <- c(a)   # no return in try code!
      } else {
        custom_vars <- c("zero legth")
        # return( ret ) 
      }
    
    0 回复  |  直到 2 年前
        1
  •  1
  •   jay.sf    2 年前

    这不是 function ,不需要 return 这个 回来 导致错误并触发 e 中的error函数 tryCatch

    custom_vars <- tryCatch({
        a <- report_params
        a <- as.list(strsplit(a, "-")[[1]])
        a <- stringr::str_subset(a, pattern="Analyse.*.group")
        if (length(a) > 0) {
          a <- sapply(strsplit(a, split=' group', fixed=TRUE), function(x) x[1])
          sapply(strsplit(a, split='Analyse ', fixed=TRUE), function(x) x[2])
        } else {
          "zero legth"
        }
      }, error=function(e) "error")
    
    custom_vars
    # [1] "newVar" "oldVar"