需要将数据输入到闪亮

时间:2015-05-14 15:18:56

标签: r shiny shiny-server

我在Shiny中创建了一个简单的系统,它包含一个textBox和下面的一些复选框。我希望用户将他的ID输入到textBox中,系统会自动生成一个文件名,文件名与用户ID相同。我的意思是如果用户输入" 1234Q"作为他的ID,系统将生成一个名为" 1234Q"的文件。到目前为止,我已经完成了以下工作:

#part of the ui.R file
library(shiny)
shinyUI(fluidPage(
  titlePanel(h2("Title")),
  ###textbox for entering person data
  textInput("text2", label = h3("Personal ID"), value = ""),
  verbatimTextOutput("textBoxvalue"),
  hr(),
    mainPanel(
    textOutput("text1"),
    #some checkboxes here
    actionButton("action", label = "Next")
    )
))

和我的server.R大致如下:

sw=0
shinyServer(function(input, output, session) {
  output$textBoxvalue <- renderPrint({ input$text2 })
  observe({
      fileNameData<-renderText({ input$text2 })
      fileName<<-paste(fileNameData(),sep=".","txt")
  })
  if (sw==0){
    #some operations here
    cat(someData,file=fileName,append=TRUE,sep=",") #save data

我遇到的问题是,在用户输入他的ID之后,我将该数据输入到fileName变量中,我打算用它来保存我将在if(sw == 0)部分之后获得的数据,但没有任何反应。对于我所看到的程序绕过观察部分并直接评估if(sw == 0)部分。我尝试使用隔离,没有运气。我该怎么做才能解决这个问题?

更新

我做了类似以下的事情:

shinyServer(function(input, output, session) {
  ###data received from the textbox, we need to save a file with this name only once

  ####observe
  observe({
    fileNameData<-renderText({ input$text2 })
    #print(fileNameData())  
    fileName<<-paste(fileNameData(),sep=".","txt")
  })
isolate({   
  ###end of data received from the textbox
  if (sw==0){

大致工作正常,但我错过了第一个要输入的数据,因为我的文件名是空的。

PD。总而言之,我只需要用户输入文本字段的文本值,然后创建一个具有相同名称的文件。这个过程应该只进行一次。

1 个答案:

答案 0 :(得分:1)

如果您想将if(sw==0{...}的执行链接到'input$text2,那么isolate就是您的选择。您需要将if ..包裹在isolate中,并将其放在观察者中以触发它。所以这应该有用

observe({
   fileNameData<-renderText({ input$text2 })
   fileName<<-paste(fileNameData(),sep=".","txt")

   isolate ({
      if (sw==0){
           #some operations here
           cat(someData,file=fileName,append=TRUE,sep=",") #save data
       }
    })
 })

现在isolate()位于观察者的内部,只应在input$text2更改时触发。