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

时间:2016-04-24 15:16:00

标签: r r-markdown

我创建了一个R函数,它使用db.collection.aggregate( [ {$unwind : "$sections"}, { "$match": { "_id": ObjectId("571c5c87faf473f40fd0317c") } }, { "$group" : { "_id" : "$_id", "maxSectionId" : {"$max" : "$sections.Id"} } } ]); 构造来跳过错误。该函数作为独立函数执行时有效,但在$unwind文件

中执行时会出错

代码如下

tryCatch

Rmarkdown内执行代码时出现以下错误。错误是

  

select _(。data,.dots = lazyeval :: lazy_dots(...),:找不到对象l:Anonymos等错误。

我认为代码正在尝试评估即使在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) } } 函数中存在错误时'l'将不可用。怎么解决这个问题?

1 个答案:

答案 0 :(得分:0)

最后通过添加额外检查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)
        }

    }
}

这最终都适用于两者。

全部谢谢!