R中的反应数据帧子集

R中的反应数据帧子集,r,shiny,subset,R,Shiny,Subset,您好,我想找到我的数据集的两列的相关系数。如果我使用cor(子集(虹膜,select=c(“萼片长度”)),子集(虹膜,select=c(“萼片宽度”)) 正在找到相关性,但我无法使用作为CSV文件输入的实际数据集子集,该数据集位于反应式表达式中 cor(subset(rt(), select=c("Sepal.Length")),subset(rt(), select=c("Sepal.Width")))` 那么,我怎样才能将这个被动表单的数据帧子集呢 rt<-reactive({

您好,我想找到我的数据集的两列的相关系数。如果我使用
cor(子集(虹膜,select=c(“萼片长度”)),子集(虹膜,select=c(“萼片宽度”))

正在找到相关性,但我无法使用作为CSV文件输入的实际数据集子集,该数据集位于反应式表达式中

cor(subset(rt(), select=c("Sepal.Length")),subset(rt(), select=c("Sepal.Width")))`
那么,我怎样才能将这个被动表单的数据帧子集呢

rt<-reactive({
    req(input$file1)

    csvdata <- read.csv(input$file1$datapath,
                        header = input$header
    )


    csvdata
  }) 

rt有两种解决方法:

  • 将数据帧存储在
    reactiveValues
    对象中(参见:了解非常类似的问题)

  • 通过
    rt.df将反应式表达式强制为正则R变量什么是反应式形式?我的意思是我使用反应式()创建了它。我编辑了它。@TimBiegeleisen它来自shiny,添加了一个tag@MichaelChirico我太老了,太过时了,不知道这一点:-)@TimBiegeleisen fret不,我是最近才知道的。非常有用:)实际上问题不同,我的数据集包括NAs,我用x替换了NAs
    
    #ui.r
    library(shiny)
    library(ggplot2)
    library(plotly)
    library(extrafont)
    
    fluidPage(
    
      # App title ----
      titlePanel(div("CROSS CORRELATION",style = "color:blue")),
    
      # Sidebar layout with input and output definitions ----
      sidebarLayout(
    
        # Sidebar panel for inputs ----
        sidebarPanel(
    
          # Input: Select a file ----
          fileInput("file1", "Input CSV-File",
                    multiple = TRUE,
                    accept = c("text/csv",
                               "text/comma-separated-values,text/plain",
                               ".csv")),
    
          # Horizontal line ----
          tags$hr(),
    
          # Input: Checkbox if file has header ----
          checkboxInput("header", "Header", TRUE),
    
          # Input: Select separator ----
          radioButtons("sep", "Separator",
                       choices = c(Comma = ",",
                                   Semicolon = ";",
                                   Tab = "\t"),
                       selected = ","),
    
    
          # Horizontal line ----
          tags$hr(),
    
          # Input: Select number of rows to display ----
          radioButtons("disp", "Display",
                       choices = c(Head = "head",
                                   All = "all"),
                       selected = "head")
    
    
    
    
    
        ),
        # Main panel for displaying outputs ----
        mainPanel(
    
          tabsetPanel(type = "tabs",
                      tabPanel("Table",
                               shiny::dataTableOutput("contents")),
                      tabPanel("Correlation Plot",
                               fluidRow(
                                 column(3, uiOutput("lx1")),
                               column(3,uiOutput("lx2"))),
                               hr(),
                               fluidRow(
                                 tags$style(type="text/css",
                                            ".shiny-output-error { visibility: hidden; }",
                                            ".shiny-output-error:before { visibility: hidden; }"
                                 ),
                               column(3,uiOutput("td")),
                               column(3,uiOutput("an"))),
                               plotlyOutput("sc"))
          ))
      ))
    #server.r
    function(input, output) {
      rt<-reactive({
        req(input$file1)
    
        csvdata <- read.csv(input$file1$datapath,
                            header = input$header
        )
    
    
        csvdata
      }) 
    
      output$contents <- shiny::renderDataTable({
    
        rt()
      })
    
    
      output$lx1<-renderUI({
        selectInput("lx1", label = h4("Select 1st Expression Profile"), 
                    choices = colnames(rt()[,4:15]), 
                    selected = "Lex1")
      })
      output$lx2<-renderUI({
        selectInput("lx2", label = h4("Select 2nd Expression Profile"), 
                    choices = colnames(rt()[,4:15]), 
                    selected = "Lex2")
      })
    
      output$td<-renderUI({
        radioButtons("td", label = h3("Trendline"),
                     choices = list("Add Trendline" = "lm", "Remove Trendline" = ""), 
                     selected = "")
      })
    
      output$an<-renderUI({
    
        radioButtons("an", label = h3("Correlation Coefficient"),
                     choices = list("Add R^2" = cor(subset(rt(), select=c(input$lx1)),subset(rt(), select=c(input$lx2))), "Remove R^2" = ""), 
                     selected = "")
      })   
    
    
     output$sc<-renderPlotly({
    
       p1 <- ggplot(rt(), aes_string(x = input$lx1, y = input$lx2))+
         # Change the point options in geom_point
         geom_point(color = "darkblue") +
         # Change the title of the plot (can change axis titles
         # in this option as well and add subtitle)
         labs(title = "Cross Correlation") +
         # Change where the tick marks are
         scale_x_continuous(breaks = seq(0, 80000, 10000)) +
         scale_y_continuous(breaks = seq(0, 120000, 20000)) +
         # Change how the text looks for each element
         theme(title = element_text(family = "Calibri", 
                                    size = 10, 
                                    face = "bold"), 
               axis.title = element_text(family = "Calibri Light", 
                                         size = 16, 
                                         face = "bold", 
                                         color = "darkgrey"), 
               axis.text = element_text(family = "Calibri", 
                                        size = 11))+
         theme_bw()+
         geom_smooth(method = input$td)+
         annotate("text", x = 50000, y = 50000, label = as.character(input$an))
       ggplotly(p1) %>%
         layout(hoverlabel = list(bgcolor = "white", 
                                  font = list(family = "Calibri", 
                                              size = 9, 
                                              color = "black")))
    
     }) 
    
    }