R 中的 trycatch 作用域

trycatch scope in R

以下代码有问题。当我 运行 在 RStudio 中测试它时,它很好。我得到了 custom_vars 的值,这很有意义。一旦我尝试用 Knit 运行 这段代码,它每次都会 returns 错误。

我试过在 custom_vars 范围内播放 ao运行d,但这也不起作用。

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 ) 
  }
)

如果我去掉 trycatch,它又可以正常工作了。我已经尝试了我能想到的一切。这毫无意义。

  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 ) 
  }

这不是function,不需要returnreturn 导致错误并触发了 tryCatch 中的 error 函数。

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"