R 每次按下按钮都会生成随机值

R 每次按下按钮都会生成随机值,r,shiny,R,Shiny,我不熟悉shiny,并做了一个简单的Shining应用程序,它生成iid正态变量并打印直方图。 输入有: 2个数字输入字段,mu和sigma 动作按钮 输出为选项卡集面板: 表1:5生成的值 表2:直方图 所以它不起作用。我尝试了很多变体,但唯一的解决方案是这个 下面是代码ui.R library(shiny) library(xtable) meanInput1 <- numericInput("id1", "$$mean \\ of \\ x_1$$", 1, min = -

我不熟悉shiny,并做了一个简单的Shining应用程序,它生成iid正态变量并打印直方图。 输入有:

  • 2个数字输入字段,mu和sigma
  • 动作按钮
输出为选项卡集面板:

  • 表1:5生成的值
  • 表2:直方图
所以它不起作用。我尝试了很多变体,但唯一的解决方案是这个

下面是代码ui.R

library(shiny)
library(xtable)

meanInput1 <- numericInput("id1", "$$mean \\ of \\ x_1$$", 1, min = -10, max = 10, step = 1)
meanInput2 <- numericInput("id2", "$$sd \\ of \\ x_2$$", 1, min = -10, max = 10, step = 1)
tabPanel1 <- tabPanel("generated values", tableOutput("table1"))
tabPanel2 <- tabPanel("Plot", plotOutput("plot1"))

shinyUI(fluidPage(
    withMathJax(),
    titlePanel("title"),

    sidebarLayout(
        fluid=TRUE,

        sidebarPanel(
            meanInput1,
            meanInput2,
            actionButton("goButton", "Go!")
        ),
    mainPanel(

        tabsetPanel(
            tabPanel1,
            tabPanel2
        )
    )
)))
库(闪亮)
图书馆(xtable)

meansinput1在本例中,您希望使用
eventReactive
。您可以找到使用
操作按钮的演示。您的代码也有一些奇怪的结构,在render语句中包含render语句

如果您创建了
eventReactive
函数,并将
renderable
renderPlot
调用分离出来,它会更加清晰,工作正常。最好不要将变量命名为与函数相同的名称,因此为了清晰起见,我将
变量更改为
my_表

shinyServer(
  function(input, output) {

    rand <- eventReactive(input$goButton,{
      sigma <- input$id2
      muInput <- input$id1

      my_table <- as.data.frame(rnorm(n = 5,muInput,sd = sigma))
      names(my_table) <- "x"
      return(my_table)
    })

    output$plot1 <- renderPlot({
      my_table <- rand()
      if(is.null(my_table)){
        return(NULL)
      }else{
        hist(head(my_table$x));
      }
    })


    output$table1 <- renderTable({
      my_table <- rand()

      if(is.null(my_table)){
        return(NULL)
      }else{
        my_table
      }
    });
  }
)
shinyServer(
功能(输入、输出){

rand在这种情况下,您希望使用
eventReactive
。您可以找到使用
actionButton
的演示。您的代码的结构也有些奇怪,呈现语句中包含呈现语句

如果创建
eventReactive
函数并将
renderable
renderPlot
分开调用,则调用会更加清晰且正确。最好不要将变量命名为函数,因此为了清晰起见,我将
变量更改为
我的表

shinyServer(
  function(input, output) {

    rand <- eventReactive(input$goButton,{
      sigma <- input$id2
      muInput <- input$id1

      my_table <- as.data.frame(rnorm(n = 5,muInput,sd = sigma))
      names(my_table) <- "x"
      return(my_table)
    })

    output$plot1 <- renderPlot({
      my_table <- rand()
      if(is.null(my_table)){
        return(NULL)
      }else{
        hist(head(my_table$x));
      }
    })


    output$table1 <- renderTable({
      my_table <- rand()

      if(is.null(my_table)){
        return(NULL)
      }else{
        my_table
      }
    });
  }
)
shinyServer(
功能(输入、输出){
兰德