首页 文章

wilcox.test不起作用

提问于
浏览
1

我正在尝试构建一个'数据资源管理器'闪亮的应用程序,其中包含DataTables,ggplot2图表和wilcox.test结果 . 我似乎无法让wilcox.test工作 .

在闪亮的应用程序之外,事情的工作应该是:

dat <- data.frame(outcome=sample(c("died","survived",NA), 20, TRUE),
       cntr=sample(c("hospa","hospb"), 20, TRUE), 
       s=rnorm(20), 
       t=rnorm(20), stringsAsFactors=FALSE)     

wilcox.test(dat$s ~ dat$outcome)

结果:

Wilcoxon秩和检验数据:dat $ s by dat $结果W = 25,p值= 0.3301备选假设:真正的位置偏移不等于0

在闪亮的应用程序中,下面的代码给出了'错误:分组因子>必须正好有2个级别' . (图表和表格工作正常;为清楚起见,我省略了这些) .

library(shiny)
    library(dplyr)

    dat <- data.frame(outcome=sample(c("died","survived",NA), 20, TRUE),
       cntr=sample(c("hospa","hospb"), 20, TRUE), 
       s=rnorm(20), 
       t=rnorm(20), stringsAsFactors=FALSE)

    ui <- navbarPage(
          sidebarLayout(
            sidebarPanel(
             selectInput(inputId = "y", 
              label = "Y-axis:",
              choices = c("s"="s", "t"="t"), 
              selected = "s"),
             selectInput(inputId = "z", 
              label = "Color by:",
              choices = c("outcome", "cntr"),
              selected = "outcome")
                  ),

            mainPanel(
             tabsetPanel(id="tabspanel", type = "tabs",
              tabPanel(title = "Wilcox"),
              h4(textOutput(outputId = "p")))
                   )
                  )
                 )

    server <- function(input, output, session) {
                 df <- reactive({
                              data.frame(input$y, input$z)
                          })

                 output$p <- renderText({
                                 wilcox.test(df()[,1] ~ df()[,2])
                                    })

                                              }

    shinyApp(ui=ui, server=server)

如果代码被重写:

wilcox.test(dat$s, dat$outcome)

然后错误是'错误:'x'必须是数字' .

有人可以帮忙吗?

2 回答

  • 1

    你遇到的问题是这条线

    data.frame(input$y, input$z)
    

    被翻译成类似的东西

    data.frame("s", "outcome")
    

    wicox.text 无法合理地处理这个问题 . 您应该使用以下代码

    data.frame(dat[[input$y]], dat[[input$z]])
    

    还有一些其他小问题 . 有关完整修复,请参阅下面的代码 .

    library(shiny)
    library(dplyr)
    
    dat <- data.frame(outcome=sample(c("died","survived",NA), 20, TRUE),
                      cntr=sample(c("hospa","hospb"), 20, TRUE), 
                      s=rnorm(20), 
                      t=rnorm(20), stringsAsFactors=FALSE)
    
    ui <- navbarPage(
      sidebarLayout(
        sidebarPanel(
          selectInput(inputId = "y", 
                      label = "Y-axis:",
                      choices = c("s"="s", "t"="t"), 
                      selected = "s"),
          selectInput(inputId = "z", 
                      label = "Color by:",
                      choices = c("outcome", "cntr"),
                      selected = "outcome")
        ),
    
        mainPanel(
          tabsetPanel(id="tabspanel", type = "tabs",
                      tabPanel(title = "Wilcox",
                      verbatimTextOutput(outputId = "p")))
        )
      )
    )
    
    server <- function(input, output, session) {
      df <- reactive({
        data.frame(dat[[input$y]], dat[[input$z]])
      })
    
      output$p <- renderPrint({
        wilcox.test(df()[,1] ~ df()[,2])
      })
    
    }
    
    shinyApp(ui=ui, server=server)
    
  • 0

    格雷戈尔的猜测很明显;从服务器代码下面的片段:

    dat_subset <- reactive({
            req(input$selected_type) 
             filter(dat, outcome %in% input$selected_type)
              })
    
        output$scatterplot <- renderPlot({
             ggplot(data = dat_subset(), aes_string(x = input$x, y = input$y, color = input$z)) + geom_boxplot() + labs()
              })
    
        output$nsdtable <- DT::renderDataTable({
                DT::datatable(data = dat_subset()[, 1:4], 
                  options = list(pageLength = 10), 
                  rownames = FALSE)
              })
    

相关问题