创建t检验并使用Shiny从csv获取p值

时间:2019-01-03 04:16:43

标签: r shiny bioinformatics

我正在尝试创建一个闪亮的用户界面来输入CSV,执行配对的t检验(等方差)并从样本数据集中生成热图。

我已经能够生成UI CSV上载选项卡,但是,我现在正在努力进行t检验和p值选项卡,我继续收到此错误消息:

  

警告:错误:评估嵌套太深:无限递归/ options(expressions =)?     90:

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

  data5<- reactive({
    req(input$file1)
    data5<-read.csv(input$file1$datapath,
                   header = input$header,
                   sep = input$sep,
                   quote = input$quote)
  })

   output$contents <- renderTable({

      req(input$file1)
    if(input$disp == "head") {
      return(head(data5()))
    }
    else {
      return(data5())
    }

  })

   ####ttests
   data1 <- reactive({
     data1 <- data.matrix(data5())
   })
   ctrl <- reactive({
     ctrl <- data1()[, c(2:11)]
   })
   smple <- reactive({
     smple <- data1()[, c(12:21)]
   })

   vector1 <- c(1:10)

   pvalue <- c()
   pval <- reactive ({
     for (i in vector1) {
       pvalue[i] <-
         t.test(ctrl()[i, ],
                smple()[i, ],
                paired = FALSE,
                var.equal = FALSE)$p.value

     }
     pvalue
   })

   signif <- reactive({
     sig <- c()
     for (n in vector1) {
       if (pval()[n] < 0.05) {
         sig <- append(sig, n)
       }
     }
     sig
   })

   genecol <- reactive({
     genecol <- data5()[, 1]
   })
   P.Vals <- reactive({
     as.character(P.Vals())
   })

   data6 <- reactive({
     data6 < -data.frame(genecol(), P.Vals())
   })

   output$pvalue <- renderTable(data6())

}

UI:

library(shiny)
library(shinythemes)
ui <- fluidPage(
  ####name app
  titlePanel("Uploading Files"),
  tabsetPanel(
    tabPanel("Upload CSV"),

    # Sidebar
    sidebarLayout(
      sidebarPanel(
        ###input option CSV file
        fileInput(
          "file1",
          "Choose CSV File",
          multiple = TRUE,
          accept = c("text/csv",
                     "text/comma-separated-values,text/plain",
                     ".csv")
        ),


        tags$hr(),

        ###check if CSV has a header
        checkboxInput("header", "Header", TRUE),

        ###format text file into table with separator (comma,semicolon,tab)
        radioButtons(
          "sep",
          "Separator",
          choices = c(
            Comma = ",",
            Semicolon = ";",
            Tab = "\t"
          ),
          selected = ","
        ),


        tags$hr(),

        ####select head of data or all
        radioButtons(
          "disp",
          "Display",
          choices = c(Head = "head",
                      All = "all"),
          selected = "head"
        )

      ),

      ####output panel
      mainPanel(# Output: DATA
        tableOutput("contents"))
    )
  ),


  tabPanel("T-Test",
           h4("pvalue"),
           tableOutput("pvalue"))

)

我知道这可能很复杂,但是我是一个完整的初学者,真的很难理解我的观点

1 个答案:

答案 0 :(得分:1)

没有一个可复制的示例(请参见注释),我想这可能是您的反应。即:

data1 <- reactive({
     data1 <- data.matrix(data5())
   })

反应式有点像一个函数,因为它返回最后一个值(或通过return语句传递的任何值)。在您的代码中,您似乎正在为其自身内的值重新分配反应式data1。由于作用域可能不是这种情况,但是由于递归错误,这是我的第一个猜测。

我建议您首先将反应性编辑为:

data1 <- reactive({
   data.matrix(data5())
})

编辑:

找到了:

   P.Vals <- reactive({
     as.character(P.Vals())
   })

这绝对是一个递归表达式。这是你的罪魁祸首。