data.frame 的放置错误出现在发布后。我应该把它放在哪里?

Error caused by the placement of data.frame arises after publishing. Where Should I put it instead?

我正在为我的团队制作箱线图制作器,并希望将我们所有的数据都包含在制作器中。所以我在保存数据的代码中做了一个data.frame,但我想我把它放在了错误的地方。每次我 运行 我这边的代码都能完美运行,但是当我使用 Shiny 和 运行 发布时,我得到 Warning: Error in eval: object 'Percents' not found 错误(告诉我它找不到数据?)如果我能帮到任何人,那就太好了,这是代码:

library(shiny)
All_Data <- data.frame(
    Name = as.character(c("Jeff","Bob","Greg")),
    Year = c(2015,2015,2015),
    Bacteria = c("A","B","C"),
    Site = c("C1","C1","C1"),
    Percents = c(1,2,4),
stringsasfactors = TRUE
)
ndata <-data.frame(
    Name = as.character("Preset"),
    Year = c("0"),
    Bacteria = as.factor(c("0")),
    Site = as.factor(c("0")),
    Percents = as.numeric(c("0")),
    stringsAsFactors = TRUE
)
Names <- c("2015 Acidobacteria C2", "2015 Actinobacteria C2","2015 Alpha-Proteobacteria C2", "2015 Bacteriodetes C2","2015 Verrucomicrobia C2","2016 Acidobacteria C2", "2016 Actinobacteria C2","2016 Alpha-Proteobacteria C2", "2016 Bacteriodetes C2","2016 Verrucomicrobia C2","2018 Acidobacteria C2", "2018 Actinobacteria C2","2018 Alpha-Proteobacteria C2", "2018 Bacteriodetes C2","2018 Verrucomicrobia C2","2019 Acidobacteria C2", "2019 Actinobacteria C2","2019 Alpha-Proteobacteria C2", "2019 Bacteriodetes C2","2019 Verrucomicrobia C2")
Years <- c("2015","2016","2018","2019")
names(Years)<-c("2015 C2","2016 C2","2018 C2","2019 C2")
Sites <- c("","C2")
# Define UI for application
ui <- fluidPage(
    
    # Application title
    titlePanel("ISAMR DNA Group Boxplot Maker"),
    
    # Sidebar
    sidebarLayout(
        sidebarPanel(width = 4,
            h3("Which Data Sets Would You Like to Compare?"),
            selectInput("Set1", "", choices = c(Sites, Years, Names)),
            selectInput("Set2", "",choices = c(Sites, Years, Names)),
            selectInput("factor","Based on Which Factor?", choices = c("Year", "Site", "Bacteria", "Site by Year", "Bacteria by Year", "Bacteria by Site by Year")),
            textInput("title", h4("Title"), placeholder = "Enter title..."),
            numericInput("numcol","How many colors?",value=1,min=1,max=5),
            h4("Pick the colors you want, leave the rest blank."),
            selectInput("col1","",choices = c("",colors())),
            selectInput("col2","",choices = c("",colors())),
            selectInput("col3","",choices = c("",colors())),
            selectInput("col4","",choices = c("",colors())),
            selectInput("col5","",choices = c("",colors())),
            actionButton("Submit", "Submit")
        ),
        
        # Show a chosen plot
        mainPanel(
            #uiOutput("data"),
            DT::dataTableOutput("data"),
            plotOutput("plot")
        )
    )
)

# Define server logic
server <- function(input, output) {
    
    ndata<-eventReactive(input$Submit, {req(input$Submit)
        
        if (input$Set1 %in% Names & input$Set2 %in% Names){
        ndata <- filter(All_Data, All_Data$Name == input$Set1 | All_Data$Name == input$Set2)
        }
        else if (input$Set1 %in% Names & input$Set1 %in% Years){
            ndata <- filter(All_Data, All_Data$Name == input$Set1 | All_Data$Year == input$Set2)
        }
        else if (input$Set1 %in% Names & input$Set1 %in% Sites){
            ndata <- filter(All_Data, All_Data$Name == input$Set1 | All_Data$Site == input$Set2)
        }
        else if (input$Set1 %in% Years & input$Set1 %in% Names){
            ndata <- filter(All_Data, All_Data$Site == input$Set1 | All_Data$Name == input$Set2)
        }
        else if (input$Set1 %in% Years & input$Set2 %in% Years){
            ndata <- filter(All_Data, All_Data$Year == input$Set1 | All_Data$Year == input$Set2)
        }
        else if (input$Set1 %in% Years & input$Set2 %in% Sites){
            ndata <- filter(All_Data, All_Data$Year == input$Set1 | All_Data$Site == input$Set2)
        }
        else if (input$Set1 %in% Sites & input$Set1 %in% Names){
            ndata <- filter(All_Data, All_Data$Site == input$Set1 | All_Data$Name == input$Set2)
        }
        else if (input$Set1 %in% Sites & input$Set1 %in% Years){
            ndata <- filter(All_Data, All_Data$Site == input$Set1 | All_Data$Year == input$Set2)
        }
        else if (input$Set1 %in% Sites & input$Set1 %in% Sites){
            ndata <- filter(All_Data, All_Data$Site == input$Set1 | All_Data$Site == input$Set2)
        }   })

        output$data <- DT::renderDataTable({
            ndata()
        })
observeEvent(input$numcol,{req(input$numcol)
        if (input$numcol == 1){coll<-c(input$col1)}
        if (input$numcol == 2){coll<-c(input$col1,input$col2)}
        if (input$numcol == 3){coll<-c(input$col1,input$col2,input$col13)}
        if (input$numcol == 4){coll<-c(input$col1,input$col2,input$col3,input$col4)}
        if (input$numcol == 5){coll<-c(input$col1,input$col2,input$col3,input$col4,input$col5)}
})    
    
observeEvent(input$factor,{req(input$factor)
        if (input$factor == "Year"){
            output$plot <- renderPlot(
            boxplot(Percents ~ Year, data = ndata(), main = input$title, ylab = "Relative Abundance", col = coll))
            }
        
        else if (input$factor == "Site"){
            output$plot <- renderPlot(
                boxplot(Percents ~ Site, data = ndata(), main = input$title, ylab = "Relative Abundance", col = coll))   
        }
        
        else if (input$factor == "Bacteria"){
            output$plot <- renderPlot(
                boxplot(Percents ~ Bacteria, data = ndata(), main = input$title, ylab = "Relative Abundance", col = coll))   
        }
        
        else if (input$factor == "Site by Year"){
            output$plot <- renderPlot(
                boxplot(Percents ~ Year%in%Site, data = ndata(), main = input$title, ylab = "Relative Abundance", col = coll))   
        }
        
        else if (input$factor == "Bacteria by Year"){
            output$plot <- renderPlot(
                boxplot(Percents ~ Year%in%Bacteria, data = ndata(), main = input$title, ylab = "Relative Abundance", col = coll))   
        }

        else if (input$factor == "Bacteria by Site by Year"){
            output$plot <- renderPlot(
                boxplot(Percents ~ Year%in%Site%in%Bacteria, data = ndata(), main = input$title, ylab = "Relative Abundance", col = coll))   
        }
})
}

# Run the application 
shinyApp(ui = ui, server = server)

(我没有包含真实数据)

在您的 All_Data 创作中,stringsasfactors = True 需要 stringsasfactors = TRUE 或至少 T。还建议在 textInput 中使用占位符参数,例如 textInput("title", h4("Title"), placeholder = "Enter title...")

我想知道百分比错误是否是由于我的上述建议引起的,因为所有值都没有正确分配

你这里有一些问题。您需要逐层定义 ndata 反应式数据框,确保每一层都能提供您所期望的。而不是 input$Set1 %in% Years,它应该是 Years %in% input$Set1。我会把它留给你来修复它,因为它有很多条件,有些是重复的。我将只使用 airquality 数据。最后,请只定义一次output$plot。您可以在内部有条件地绘制。我只是向您展示该程序有效。请看下面。你应该可以适应它。

ui <- fluidPage(
  
  # Application title
  titlePanel("ISAMR DNA Group Boxplot Maker"),
  
  # Sidebar
  sidebarLayout(
    sidebarPanel(width = 4,
                 h3("Which Data Sets Would You Like to Compare?"),
                 selectInput("Set1", "", choices = c(Sites, Years, Names)),
                 selectInput("Set2", "",choices = c(Sites, Years, Names)),
                 selectInput("factor","Based on Which Factor?", choices = c("Year", "Site", "Bacteria", "Site by Year", "Bacteria by Year", "Bacteria by Site by Year")),
                 textInput("title", h4("Title"), value = "Enter title..."),
                 numericInput("numcol","How many colors?",value=1,min=1,max=5),
                 h4("Pick the colors you want, leave the rest blank."),
                 selectInput("col1","",choices = c("",colors())),
                 selectInput("col2","",choices = c("",colors())),
                 selectInput("col3","",choices = c("",colors())),
                 selectInput("col4","",choices = c("",colors())),
                 selectInput("col5","",choices = c("",colors())),
                 actionButton("Submit", "Submit")
    ),
    
    # Show a chosen plot
    mainPanel(
      
      #uiOutput("data"),
      DT::dataTableOutput("data")
      ,plotOutput("plot")
    )
  )
)

# Define server logic
server <- function(input, output) {
  
  ndata <- eventReactive(input$Submit, {
    req(input$Submit,input$Set1,input$Set2)
    ndata <- airquality
    # if (Names %in% input$Set1 & Names %in% input$Set2 ){
    #   ndata <- filter(All_Data, All_Data$Name == input$Set1 | All_Data$Name == input$Set2)
    # }
    # else if (Names %in% input$Set1 & Years %in% input$Set1){
    #   ndata <- filter(All_Data, All_Data$Name == input$Set1 | All_Data$Year == input$Set2)
    # }
    # else if (Names %in% input$Set1 & Sites %in% input$Set1){
    #   ndata <- filter(All_Data, All_Data$Name == input$Set1 | All_Data$Site == input$Set2)
    # }
    
    # else if (input$Set1 %in% Years & input$Set1 %in% Names){
    #   ndata <- filter(All_Data, All_Data$Site == input$Set1 | All_Data$Name == input$Set2)
    # }
    # else if (input$Set1 %in% Years & input$Set2 %in% Years){
    #   ndata <- filter(All_Data, All_Data$Year == input$Set1 | All_Data$Year == input$Set2)
    # }
    # else if (input$Set1 %in% Years & input$Set2 %in% Sites){
    #   ndata <- filter(All_Data, All_Data$Year == input$Set1 | All_Data$Site == input$Set2)
    # }
    # else if (input$Set1 %in% Sites & input$Set1 %in% Names){
    #   ndata <- filter(All_Data, All_Data$Site == input$Set1 | All_Data$Name == input$Set2)
    # }
    # else if (input$Set1 %in% Sites & input$Set1 %in% Years){
    #   ndata <- filter(All_Data, All_Data$Site == input$Set1 | All_Data$Year == input$Set2)
    # }
    # else if (input$Set1 %in% Sites & input$Set1 %in% Sites){
    #   ndata <- filter(All_Data, All_Data$Site == input$Set1 | All_Data$Site == input$Set2)
    # }
    
    return(ndata)
  })
  
    output$data <- DT::renderDataTable({
      ndata()
    })
    
    
    observeEvent(input$numcol, {
      req(input$numcol)
      if (input$numcol == 1){coll<-c(input$col1)}
      if (input$numcol == 2){coll<-c(input$col1,input$col2)}
      if (input$numcol == 3){coll<-c(input$col1,input$col2,input$col13)}
      if (input$numcol == 4){coll<-c(input$col1,input$col2,input$col3,input$col4)}
      if (input$numcol == 5){coll<-c(input$col1,input$col2,input$col3,input$col4,input$col5)}
    })
    
    
    observeEvent(input$factor, {
      req(input$factor)
      output$plot <- renderPlot({
        boxplot(Temp~Month,
                data=ndata(),
                main="Different boxplots for each month",
                xlab="Month Number",
                ylab="Degree Fahrenheit",
                col="orange",
                border="brown"
        )
        # if (input$factor == "Year"){
        #   boxplot(Percents~Year, data = ndata(), main = input$title, ylab = "Relative Abundance", col = coll)
        # }
        #
        # else if (input$factor == "Site"){
        #   boxplot(Percents ~ Site, data = ndata(), main = input$title, ylab = "Relative Abundance", col = coll)   
        # }
        # 
        # else if (input$factor == "Bacteria"){
        #   boxplot(Percents ~ Bacteria, data = ndata(), main = input$title, ylab = "Relative Abundance", col = coll)  
        # }
      })
      
      
      # else if (input$factor == "Site by Year"){
      #   output$plot <- renderPlot(
      #     boxplot(Percents ~ Year%in%Site, data = ndata, main = input$title, ylab = "Relative Abundance", col = coll))   
      # }
      # 
      # else if (input$factor == "Bacteria by Year"){
      #   output$plot <- renderPlot(
      #     boxplot(Percents ~ Year%in%Bacteria, data = ndata, main = input$title, ylab = "Relative Abundance", col = coll))   
      # }
      # 
      # else if (input$factor == "Bacteria by Site by Year"){
      #   output$plot <- renderPlot(
      #     boxplot(Percents ~ Year%in%Site%in%Bacteria, data = ndata, main = input$title, ylab = "Relative Abundance", col = coll))   
      # }
    })
    
}

# Run the application 
shinyApp(ui = ui, server = server)

产出