运行 Rmd 文件时出错,但直接执行函数时 none

Error while running Rmd file but none when executing function directly

我创建了一个 R 函数,它使用 tryCatch 构造来跳过错误。该函数在作为独立执行时有效,但在 Rmarkdown 文件

中执行时出错

代码如下

for(x in 1:length(aa)){
    bowlers <- unique(aa[[x]]$bowler)
    for (y in 1:length(bowlers)){
        #cat("x=",x,"team",theTeams[x],"\n")
        tryCatch(l <- getBowlerWicketDetails(team=theTeams[x],name=bowlers[y],dir="."),
                 error = function(e) {
                     print("Error!")

                 }

        )
        l <- select(l,bowler,wickets,economyRate)
        o <-rbind(o,l)

    }
}

Rmd 中执行代码时出现以下错误。错误是

Error in select_(.data,.dots=lazyeval::lazy_dots(...),:object l not found calls:Anonymos etc.

我认为即使在 'l' 不可用时 getBowlerWicketDetails() 函数中出现错误,代码也会尝试求值。如何解决?

终于通过添加额外的检查 exists() 解决了问题。正如我所提到的,直接执行该函数似乎在 Rmd 中执行时有效,因为变量不存在

修改后的代码如下

for(x in 1:length(aa)){
    bowlers <- unique(aa[[x]]$bowler)
    for (y in 1:length(bowlers)){
        #cat("x=",x,"team",theTeams[x],"\n")
        tryCatch(l <- getBowlerWicketDetails(team=theTeams[x],name=bowlers[y],dir="."),
                 error = function(e) {
                     #print("Error!")                         
                 }                     
        )
        if(exists("l")){            
           m <- select(l,bowler,wickets,economyRate)
           o <-rbind(o,m)
        }

    }
}

这最终对双方都奏效了。

谢谢大家!