【问题标题】:Omit Empty Fileds on HTML output shiny app在 HTML 输出闪亮的应用程序上省略空字段
【发布时间】:2020-01-09 09:07:47
【问题描述】:

我正在开发一个以 HTML 格式输出文本的闪亮应用程序。从我的数据中,一些字段为空/空。我试图找到在输出中省略空变量的方法。下面是我的 Shinyapp 示例,其中缺少一些数据:

library(shiny)
library(shinydashboard)
library(sqldf)

    missingdata=data.frame(
               id=c("001","002","003","004"),
               age=c("17",NA, "19", NA),
               bmi=c(NA, "16", "20",  NA),
              chol=c("49.8", "50.7", "52.0", "56.5")
              )


    ui <- dashboardPage(
           dashboardHeader(),
           dashboardSidebar(
             sidebarMenu(
               menuItem("TexSearch", tabName = "Tabs", icon = icon("object-ungroup"))) ),


       dashboardBody(
            tabItem(tabName = "Tabs",
               fluidRow(
                 column(width=3, 
                 box(
                   title="Search ",
                   solidHeader=TRUE,
                   collapsible=TRUE,
                   width=NULL
                   )),

          column( width=9,
                  tabBox(
                    width="100%",
                    tabPanel("tab1", 
                             htmlOutput("searchtext")
                    )))))))

 server <- function(input, output, session) {
     output$searchtext <- renderUI({

     searchdata <- reactive({
      sqldf(paste0("SELECT  *
                   FROM missingdata
                  "))
      }) 


    output = ""
     relevantdata <- searchdata()
      if (dim(relevantdata)[1] < 100) {
        output <-
         paste(output,
            "<b>Number of quotes: ",
            as.character(dim(relevantdata)[1]),
            "</b>.<br/>")
         for (i in seq(from = 1,
                  to = dim(relevantdata)[1])) {
         output <- paste(output,
                      paste("id: ", relevantdata[i, "id"]),
                      sep = "<br/><br/>")

        output <- paste(output,
                        paste("age: ", relevantdata[i, "age"]),
                        sep = "<br/><br/>")

      output <- paste(output,
                      paste("bmi: ", relevantdata[i, "bmi"]),
                      sep = "<br/><br/>")
      output <- paste(output,
                      paste("chol: ", relevantdata[i, "chol"]),
                      sep = "<br/><br/>")
          }

          }
       HTML(output)

      })

      }
shinyApp(ui, server)

当年龄和体重指数为 NA 时,我如何避免打印它们并且仅在它们有值时才输出它们?

我没有运气的尝试如下:

if (relevantdata$age == "NA"){
    return(NULL)
   }else{  
    output <- paste(output,
              paste("age: ", relevantdata[i, "age"]),
              sep = "<br/><br/>")
   }

还有下面的sn-p,它根本没有输出:

   ifelse(is.na(relevantdata$age), return(NULL), output <- paste(output,
                                                          paste("age: ", relevantdata[i, "age"]),
                                                          sep = "<br/><br/>")) 

【问题讨论】:

    标签: r shiny shinyapps


    【解决方案1】:

    您需要检查 for 循环中的当前值 i 是否为 NA 而不是整列 relevantdata$age

    ifelse(!is.na(relevantdata[i, "age"]),output <- paste(output, paste("age: ", relevantdata[i, "age"]),sep = "<br/><br/>") , NA)
    

    【讨论】:

      猜你喜欢
      • 2015-11-12
      • 2019-10-03
      • 2018-11-09
      • 2019-03-24
      • 2016-09-09
      • 2021-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多