LoginSignup
2
1

More than 5 years have passed since last update.

Shinyで時間がかかる処理をするときの一工夫

Posted at

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で動かしています。

supportがある程度高めで、絞り込まれるとき

qss1.png

supportを低くして莫大なルールが発生するとき

qss2.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1