更新全局变量并将其返回R Shiny

时间:2015-08-06 03:45:59

标签: r shiny

我想知道如何通过调用函数来更新全局变量并返回它。这是来自' server.R'的简短代码。我的ui.R由几行代码组成,用于显示输出。

sentence <- ""
result <- c()

updateSen <- function(input){
   print("function executed!")
   if(length(sentence) == 0){
      result <<- c(result, "First")
      sentence <<- paste(sentence, input, sep = " ")
   }else{
      result <<- c(result, input)
      sentence <<- paste(sentence, input, sep = " ")           
   }
}

shinyServer(
   function(input, output){
      word <- reactive({
         word <- input$tid
      })
      output$oid <- renderText({
         paste(input$tid)
      })

      output$sen <- renderText({
         updateSen(word())
         sentence
      })
   }
)

我想用上面的代码做的是这个......   1.要求用户输入单词   2.用一个用户输入的单词创建一个句子   3.运行一个功能   4.显示一个句子

然而,似乎它并没有很好地运作,并且有许多事情我不知道发生了什么。首先,我不知道为什么在程序执行期间会多次调用updateSen()函数。第二,全球变量&#39;结果&#39;第一次执行后不会改变。我希望这个变量能够更新。

1 个答案:

答案 0 :(得分:1)

根据我的理解,一旦你应用了反应关键字,变量'result'就会自动开始变化。试试

updateSen <- reactive(function(input){
   print("function executed!")
   ...           
   }
})

其次,我认为您不应该将senresult等变量视为“全局”,而应该使用textInput()函数和input$sentence之类的变量。 我建议你阅读更多关于Shiny中反应变量和函数的内容。