2

この関数は接続を適切に閉じません(したがって、最大制限の16に達しますが、これは明らかに良くありません)。

query.test = function(query) {
  con = dbConnect(MySQL(), groups = 'test')
  output = tryCatch({
    dbGetQuery(con, query)
    }, warning = function(w) {
      print(w)
    }, error = function(e) {
      print(e)
    }, finally  = function() {
      dbDisconnect(con)
    })
  return(output)
}

句のステートメントは常に実行されると思っていたfinallyので、このコードが機能しない理由はわかりません。

4

1 に答える 1

3

答えは(私にとって)少し奇妙なR構文であることがわかりました:

query.test = function(query) {
  output = tryCatch({
    con = dbConnect(MySQL(), groups = 'test')
    dbGetQuery(con, query)
    }, warning = function(w) {
      print("warning!")
    }, error = function(e) {
      print("error encountered!")
      print(e)
    }, finally = {
      dbDisconnect(con)
      print("goodbye")
    })  
  return(output)
}

ここでの違いは次のとおりです。

}, finally  = function() {
      dbDisconnect(con)
    })

する必要があります

}, finally  = {
      dbDisconnect(con)
    })

なぜ最初の方法で機能しないのかについて誰かが洞察を持っているならfinally、私はそれを聞いていただければ幸いです。

于 2013-01-25T19:58:00.787 に答える