由于数据中存在NA,无法在R中绘制直方图

由于数据中存在NA,无法在R中绘制直方图,r,shiny,histogram,R,Shiny,Histogram,我正在创建一个闪亮的应用程序,其中有一个下拉列表,它将值发送到服务器以创建直方图 datasetInput <- reactive({ switch(input$diamonds1, "Length" = diamonds$x, "Breath" = diamonds$y, "Height" = diamonds$z, " Please Select a Type " = NULL)

我正在创建一个闪亮的应用程序,其中有一个下拉列表,它将值发送到服务器以创建直方图

datasetInput <- reactive({ 
    switch(input$diamonds1, 
           "Length" = diamonds$x, 
           "Breath" = diamonds$y, 
           "Height" = diamonds$z,
           " Please Select a Type " = NULL) 
  }) 
  output$hist <- eventReactive(input$action,{**hist(datasetInput())**
代码如下所示

datasetInput <- reactive({ 
    switch(input$diamonds1, 
           "Length" = diamonds$x, 
           "Breath" = diamonds$y, 
           "Height" = diamonds$z,
           " Please Select a Type " = NULL) 
  }) 
  output$hist <- eventReactive(input$action,{**hist(datasetInput())**
用户界面:

datasetInput <- reactive({ 
    switch(input$diamonds1, 
           "Length" = diamonds$x, 
           "Breath" = diamonds$y, 
           "Height" = diamonds$z,
           " Please Select a Type " = NULL) 
  }) 
  output$hist <- eventReactive(input$action,{**hist(datasetInput())**
服务器:

datasetInput <- reactive({ 
    switch(input$dataset, 
           "Length" = diamonds$x, 
           "Breath" = diamonds$y, 
           "Height" = diamonds$z,
           " Please Select a Type " = NULL) 
  }) 
  output$hist <- eventReactive(input$action,{hist(rnorm(input$diamonds))
  })
datasetInput <- reactive({ 
    switch(input$diamonds1, 
           "Length" = diamonds$x, 
           "Breath" = diamonds$y, 
           "Height" = diamonds$z,
           " Please Select a Type " = NULL) 
  }) 
  output$hist <- eventReactive(input$action,{**hist(datasetInput())**
因此,当我从下拉列表中选择任何内容并单击“提交”按钮时,它会显示出来

Error Msg: Listening on http://127.0.0.1:6691 Warning in rnorm(input$diamonds) : NAs introduced by coercion Warning: Error in rnorm: invalid arguments Stack trace (innermost first):   
    100: rnorm
     99: hist
     98: eventReactiveHandler [#10]
     78: output$hist
      4: <Anonymous>
      3: do.call
      2: print.shiny.appobj
      1: <Promise>
datasetInput <- reactive({ 
    switch(input$diamonds1, 
           "Length" = diamonds$x, 
           "Breath" = diamonds$y, 
           "Height" = diamonds$z,
           " Please Select a Type " = NULL) 
  }) 
  output$hist <- eventReactive(input$action,{**hist(datasetInput())**

如何在创建直方图时避免NA?

您的问题与NAs无关。阅读该错误消息的第二部分:rnorm中的错误:无效参数堆栈跟踪最里面的第一个

datasetInput <- reactive({ 
    switch(input$diamonds1, 
           "Length" = diamonds$x, 
           "Breath" = diamonds$y, 
           "Height" = diamonds$z,
           " Please Select a Type " = NULL) 
  }) 
  output$hist <- eventReactive(input$action,{**hist(datasetInput())**
问题是rnorm接受一个数值参数,该参数确定从正态分布生成多少随机数。您可以使用rnorInput$diamonds调用它,其中input$diamonds返回selectInput的选定值,所有这些值都是字符串:choices=cLength、Breath、Height,请选择一种类型

datasetInput <- reactive({ 
    switch(input$diamonds1, 
           "Length" = diamonds$x, 
           "Breath" = diamonds$y, 
           "Height" = diamonds$z,
           " Please Select a Type " = NULL) 
  }) 
  output$hist <- eventReactive(input$action,{**hist(datasetInput())**
您的代码应该是:

datasetInput <- reactive({ 
    switch(input$diamonds, 
           "Length" = diamonds$x, 
           "Breath" = diamonds$y, 
           "Height" = diamonds$z,
           " Please Select a Type " = NULL) 
  })
  output$hist <- eventReactive(input$action,{hist(rnorm(datasetInput()))
  })
datasetInput <- reactive({ 
    switch(input$diamonds1, 
           "Length" = diamonds$x, 
           "Breath" = diamonds$y, 
           "Height" = diamonds$z,
           " Please Select a Type " = NULL) 
  }) 
  output$hist <- eventReactive(input$action,{**hist(datasetInput())**

您需要在rnorm调用中调用datasetInput,以便获得适当的数值,而不是输入$diamonds(以字符形式返回选择)

是的,实际问题在于rnorm方法。在这里,如果我们使用rnorm,它将给出相同的结果,而不考虑开关情况下的任何选择。为了得到准确的直方图,我们必须删除rnorm方法,然后调用datasetInput方法

datasetInput <- reactive({ 
    switch(input$diamonds1, 
           "Length" = diamonds$x, 
           "Breath" = diamonds$y, 
           "Height" = diamonds$z,
           " Please Select a Type " = NULL) 
  }) 
  output$hist <- eventReactive(input$action,{**hist(datasetInput())**

感谢@divi的帮助。您让我接近了解决方案。

您应该提供完整的用户界面和服务器,以便我们重现您的错误。
datasetInput <- reactive({ 
    switch(input$diamonds1, 
           "Length" = diamonds$x, 
           "Breath" = diamonds$y, 
           "Height" = diamonds$z,
           " Please Select a Type " = NULL) 
  }) 
  output$hist <- eventReactive(input$action,{**hist(datasetInput())**