【问题标题】:How to Create a Reactive Base R Boxplot in Shiny?如何在 Shiny 中创建反应性基础 R 箱线图?
【发布时间】:2021-09-16 01:09:24
【问题描述】:

我的数据框名为 df...

pain_severity = c(1, 5, 10, 8, 6, 4)

urinary_severity = c(3, 8, 9, 7, 6, 10)

df = data.frame(pain_severity, urinary_severity)

我让用户在选择输入中选择是否需要疼痛或泌尿严重程度...

用户界面:

tabPanel("1-Variable Visualization",
                          sidebarLayout(
                            sidebarPanel(
                              h1("Menu Selection"),

selectInput(inputId = "variable_choice", 
            label = "Variable", 
            choices = df, 
            selected = "pain_severity")

mainPanel(
         tabsetPanel(type = "tabs",
                     tabPanel("Boxplot", plotOutput("boxplot")),
)))))

服务器:

server <- function(input, output, session) {

output$boxplot <- renderPlot({
boxplot(input$variable_choice, 
        data = df, 
        main = "", xlab="", ylab = "", horizontal = TRUE)

points(mean(input$variable_choice, na.rm = TRUE), 
       data = df, 
       1, 
       col = "red")

  })

}

我不断收到错误消息... 错误: 二进制运算符的非数字参数

为什么会这样?当我在基础 R 中运行代码时,仅使用疼痛或泌尿严重程度作为我的变量,它工作得很好。当我要求它根据来自 variable_choice 的用户输入进行调整时,它给了我该错误消息。尝试运行用户输入时是否必须使用 ggplot?

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    您的代码有几个问题:

    • choices 参数只能采用列名向量,试试choices = colnames(df)
    • 绘图函数要么需要一个公式(但是如果没有分组变量我无法使它工作)或数据本身。尝试:
    output$boxplot <- renderPlot({
    boxplot(df[input$variable_choice], 
            main = "", xlab=input$variable_choice, ylab = "", horizontal = TRUE)
    
    points(mean(df[input$variable_choice], na.rm = TRUE), 
           1, 
           col = "red")
    
      })
    

    这样,您使用字符input$variable_choice 来索引您的data.frame

    【讨论】:

      【解决方案2】:

      谢谢。斯塔佳是对的。我有一个更深入的代码,用于基于用户选择的选择,我觉得这会使原始问题陷入困境,所以我只写 df 来简化它,但我应该说 colnames(df),你是对的。箱线图完美运行,但该点返回一个 NA 值,错误提示“参数不是数字或逻辑:返回 NA”,并且该点未显示在图表上。

      我对此的解决方案是使用 colMeans 并像这样在服务器中定义它...

      服务器:

      col_mean <- colMeans(filtered_data()[1:908], na.rm = TRUE)
      points(col_mean[input$variable_choice], 1, col = "red")
      

      我创建了 col_mean 来获取数据集中的前 908 个数字列,并将其转换为新数据集中的一个均值点。然后,我以点为单位使用了新的数据集,为每个点提供了正确的平均显示。

      【讨论】:

        猜你喜欢
        • 2021-10-23
        • 2020-09-02
        • 1970-01-01
        • 1970-01-01
        • 2021-08-22
        • 1970-01-01
        • 1970-01-01
        • 2021-03-03
        相关资源
        最近更新 更多