arulesの閾値が難しい
Shinyでarulesを動かしていると、適当なパラメータで試すと止まらなくなることが分かってきました。
そりゃあ、全部の組み合わせを列挙するようになると、相当な事になりますわな。
これを避けるために、普通にRを動かしているときはsetTimeLimitという便利な関数がありますが、Shinyで使う時には一工夫が必要です。という話です。
ShinyにおけるsetTimeLimitのベタープラクティス
いきなりベストなどという強い主張はしません。。。
server.Rのいちぶ
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で動かしています。