R Shiny : Infinite Recursion

标签 r recursion shiny

我正在开发一个 Shiny 应用程序,该应用程序试图猜测用户输入的文本片段中的下一个词。为此,我加载了三个数据帧,其中包含对下一个单词的可能猜测,并使用 grepl 查找用户输入文本末尾的三元语法或二元语法匹配。我在“常规”R 中构建它时没有错误或问题,但是当将它转换为 Shiny 时,我收到此错误:

错误:评估嵌套太深:无限递归/选项(表达式=)?

正如其他 Stack Overflow 帖子所建议的那样,我摆弄了 options(expressions = ) 值,但仍然遇到错误。没有太多其他信息来指导我,并且注意到它没有问题,任何人都可以看到我哪里出错了吗?提前致谢!

对于背景,我正在运行:Win 7,64 位操作系统 | R v3.1.1 | RStudio v0.98.944

ui.R

library(shiny)
shinyUI(fluidPage(
   titlePanel("Capstone: Word Guesser"),
      fluidRow(
         column(12, 
            mainPanel(
               h4('Sentence Fragment'),
               p('Please enter a snippet of text - with this as a start, the app will provide you 5 guesses in ranked order to complete your phrase'),
               textInput('sentence', "Snippet:", value = "Enter some text and have a great"),
               h4('Guesses'),
               p('Below are our top five guesses for the word that completes this snippet'),
               verbatimTextOutput("final.guesses")
            )
         )
      )
))

服务器.R

options(expressions = 10000)
quad.grams <- readRDS("quadgrams.rds")
tri.grams <- readRDS("trigrams.rds")
kneser.ney <- readRDS("kneserney.rds")
library(shiny)
library(tm)
library(plyr)
library(stringi)
library(RWeka)
library(stringr)
function(input, output, clientData, session) {
   observe({
      sentence <- reactive({as.character(input$sentence)})
      sentence <- reactive({str_replace_all(sentence(), "[[:punct:]]", "")})
      sentence <- reactive({tolower(sentence())})
      sentence <- reactive({scan_tokenizer(sentence())})
      n <- reactive({length(sentence())})
      tri.frag <- reactive({paste(sentence()[n() - 2], sentence()[n() - 1], sentence()[n()])})
      bi.frag <- reactive({paste(sentence()[n() - 1], sentence()[n()])})
      quad.guesses <- reactive({quad.grams[grepl(tri.frag(), quad.grams$n1.Gram) == TRUE, 2]})
      tri.guesses <- reactive({tri.grams[grepl(bi.frag(), tri.grams$n1.Gram) == TRUE, 2]})
      guesses <- reactive({c(quad.guesses(), tri.guesses(), kneser.ney$nGram)})
      output$final.guesses <- renderPrint({guesses()[1:5]})
   })
}

最佳答案

我认为您的问题出在这里(无法确定):

observe({
  sentence <- reactive({as.character(input$sentence)})
  sentence <- reactive({str_replace_all(sentence(), "[[:punct:]]", "")})
  sentence <- reactive({tolower(sentence())})
  sentence <- reactive({scan_tokenizer(sentence())})

这四行都在使 sentence react ,每一行都依赖于它自己,input$sentence 和其他每一行都让 shiny 感到困惑一切正常。更好的解决方案是:

observe({
  sentence1 <- reactive({as.character(input$sentence)})
  sentence2 <- reactive({str_replace_all(sentence1(), "[[:punct:]]", "")})
  sentence3 <- reactive({tolower(sentence2())})
  sentence4 <- reactive({scan_tokenizer(sentence3())})

您可以删除 sentence1 行 - 我认为 input$sentence 已经是字符。如果您愿意,可以合并剩余的行,例如:

  sentence <- reactive({scan_tokenizer( tolower(
                str_replace_all(input$sentence, "[[:punct:]]", "") ))
             })

关于R Shiny : Infinite Recursion,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27431144/

相关文章:

r - 如何将 Rmd 文件的 html 输出对齐到左侧

c - 返回值含义 |图案

在 R/shiny 中使用 renderTmap 时的 react 性问题

c++ - 递归树算法中的内存使用

r - R4.0.0 中 RStudio Server 和 Shiny Server 中的 OpenStreetMaps 自动绘图错误

r - Shiny 的 DT "rows_selected"和 "rows_all"已弃用?

r - Debian 上的 R 中未加载依赖包

r - plot.new 还没有被调用

r - R 中的替换函数是什么?

python - 当我尝试从循环中进行递归时出现 UnboundLocalError ?