arulesの閾値が難しい
Shinyでarulesを動かしていると、適当なパラメータで試すと止まらなくなることが分かってきました。
そりゃあ、全部の組み合わせを列挙するようになると、相当な事になりますわな。
これを避けるために、普通にRを動かしているときはsetTimeLimitという便利な関数がありますが、Shinyで使う時には一工夫が必要です。という話です。
ShinyにおけるsetTimeLimitのベタープラクティス
いきなりベストなどという強い主張はしません。。。
tryCatch({
setTimeLimit(5,5)
# 時間がかかる処理
d <- apriori(as(df.test[[2]],"transactions"), parameter=list(support=input$support, confidence=input$confidence))
setTimeLimit(Inf,Inf)
},error=function(e){
setTimeLimit(Inf,Inf)
stop(e)
})
input$support等の値によっては、aprioriの処理にかなり時間がかかる可能性があるので、これをsetTimeLimitしてどうにかしたいのですが、単にsetTimeLimitするとShinyのプロセス自体が死んでしまいます。(Shinyを動かしているときは、RStudioのコンソールが反応しなくなりますよね。RStudioのコンソールとリンクしているRのプロセスを、Shinyが持って行ってしまっているからですね。)
tryCatchの中でsetTimeLimitを元に戻すことにより、他のエラーが発生することを避けます。
サンプルは、例によってQlik Senseで動かしています。
supportがある程度高めで、絞り込まれるとき
## supportを低くして莫大なルールが発生するとき