Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Shining server中变量的查询和操作_R_Shiny - Fatal编程技术网

Shining server中变量的查询和操作

Shining server中变量的查询和操作,r,shiny,R,Shiny,我将继续尝试了解shiny的基本知识。我现在试图通过文本框(input$answer)获取用户输入,基于该输入进行条件测试(input$answer==“xyz”),并基于该条件生成输出(if{}else{}) 我想我记下了很多基础知识。我可以得到一个用户输入,我已经把它转换成一个反应值,这样我就可以在if语句中生成一个查询,而不会出现错误。在提交答案后,我可以使用用户输入生成输出 但有两个问题: 查询(隔离(输入$answer)=“Hello”)永远不会为真,因为isolare(输入$answ

我将继续尝试了解shiny的基本知识。我现在试图通过文本框(
input$answer
)获取用户输入,基于该输入进行条件测试(
input$answer==“xyz”
),并基于该条件生成输出(
if{}else{}

我想我记下了很多基础知识。我可以得到一个用户输入,我已经把它转换成一个反应值,这样我就可以在if语句中生成一个查询,而不会出现错误。在提交答案后,我可以使用用户输入生成输出

但有两个问题:

  • 查询
    (隔离(输入$answer)=“Hello”)
    永远不会为真,因为
    isolare(输入$answer)
    的值始终保持其第一次分配的值。在当前的情况下是“输入文本…”,但如果我将此项留空,行为不会改变(它只是假定“”为值)。如果我将语句更改为
    If(隔离(输入$answer)=“输入文本…”)
    则计算结果将始终为真。为什么即使在后续的
    paste0(“您的答案”,输入$answer,“不正确!”)}
    中正确更新了该值,该值也不会更改
  • 是否有一种方法可以防止在服务器启动时进行正确/不正确的评估,并且只有在第一次按下submit按钮时才会触发
  • 库(闪亮)
    #//定义游戏的用户界面----
    
    ui当你从普通的R移动到闪亮的R时,你需要把你的逻辑从里到外一点。您希望是被动的一切(即响应用户输入的更改)都需要在被动上下文中(例如
    renderText

    在本例中,加载应用程序时,
    if
    语句实际上只执行一次。要使其更符合您的需要,请尝试以下方法:

        output$evaluation <- renderText({ 
            
            if (input$answer == "Hello") {
                #// correct counter up by one
                correct <- correct + 1
                counter <- counter + 1
                paste0("Your answer of `",input$answer, "` is correct!") 
            } #// end if
            else {
                #// answer is not correct
                counter <- counter + 1
                paste0("Your answer of `",input$answer, "` is incorrect!") 
            } #// end else     
            
        })  
    

    output$evaluation当您从正常的R移动到闪亮的R时,您需要将您的逻辑从内到外一点。您希望是被动的一切(即响应用户输入的更改)都需要在被动上下文中(例如
    renderText

    在本例中,加载应用程序时,
    if
    语句实际上只执行一次。要使其更符合您的需要,请尝试以下方法:

        output$evaluation <- renderText({ 
            
            if (input$answer == "Hello") {
                #// correct counter up by one
                correct <- correct + 1
                counter <- counter + 1
                paste0("Your answer of `",input$answer, "` is correct!") 
            } #// end if
            else {
                #// answer is not correct
                counter <- counter + 1
                paste0("Your answer of `",input$answer, "` is incorrect!") 
            } #// end else     
            
        })  
    

    output$evaluation您的主要问题是,您试图在被动上下文之外的值上执行逻辑比较。在比较环境中,
    input$answer
    从未更改


    另外,
    answer您的主要问题是,您试图在被动上下文之外的值上执行逻辑比较。在比较环境中,
    input$answer
    从未更改


    另外,
    回答得很好。非常感谢。我想我现在看到了如何定义变量并使用它们。如果变量仅在服务器端使用,则可以照常使用。如果它们需要在UI和服务器之间穿梭,则必须将它们定义为反应式,然后可以通过命令中的名称$xyz调用进行寻址。如果要在其他函数(如If)中使用它们,则需要使用isolate调用它们。最后,将所有内容包装在`observeEvent(input$answer)`中,每次提交新答案时,整个位只执行一次。太好了。非常感谢。我想我现在看到了如何定义变量并使用它们。如果变量仅在服务器端使用,则可以照常使用。如果它们需要在UI和服务器之间穿梭,则必须将它们定义为反应式,然后可以通过命令中的名称$xyz调用进行寻址。如果要在其他函数(如If)中使用它们,则需要使用isolate调用它们。最后,将所有内容包装在`observeEvent(input$answer)`中,每次提交新答案时,整个位只执行一次。谢谢!
    占位符=“输入文本…”
    正是我认为它应该做的。这也解释了为什么有“价值”会把一切都搞砸。谢谢!
    占位符=“输入文本…”
    正是我认为它应该做的。这也解释了为什么有“价值”会把一切都搞砸。
    library(shiny)
    #// Define UI for game ----
    ui <- fluidPage(
      #// for query
      fluidRow ( 
        #// column width and title
        column(6, h3("Question"),
               h4("Type the word `Hello`"),  
               #// Input: Text Box
               textInput("answer", h3("Text input"),
                         placeholder = "Enter text..."),
               #// submit button to terminate the text input
               submitButton("Submit")
        ), #// end column
        #// column width and title
        column(6, h3("Evaluation"),
               #// Output: Text ----
               textOutput(outputId = "evaluation"),
               br(),
               textOutput(outputId = "trials")  
        ) #// end column
      ) #// end fluidrow
    ) # end fluidpage
    
    # Define server logic ----
    server <- function(input, output) { 
    #// set up variables
      values <- reactiveValues()
      values$counter <- -1
      values$correct <- 0
      num <- 10
      
      #// logic for correct vs. incorrect
      observeEvent(input$answer,{
        if (isolate(input$answer) == "Hello") {
        #// correct counter up by one
        values$correct <- values$correct + 1
        #// answer is correct
        output$evaluation <- renderText({ 
          paste0("Your answer of `",input$answer, "` is correct!") }) 
      } #// end if
      else {
        #// answer is not correct
        output$evaluation <- renderText({ 
          paste0("Your answer of `",input$answer, "` is incorrect!") }) 
      } #// end else     
      values$counter <- values$counter + 1  
      output$trials <- renderText({paste0("Trials: ",values$counter,"  Correct: ",values$correct)})  
      #// stop app if count reaches number of games
      if (values$counter >= num) stopApp()
      })
    } #// end server
    # Run the app ----
    shinyApp(ui = ui, server = server)