Пропускать пустые файлы в приложении HTML - PullRequest
0 голосов
/ 09 января 2020

Я работаю над блестящим приложением, которое выводит текст в 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)

Как не печатать поля age и bmi, когда это NA, и выводить их только тогда, когда они имеют значения?

То, что я попытался без удачи, выглядит следующим образом:

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

А также приведенный ниже фрагмент, который не дал никакого результата:

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

1 Ответ

1 голос
/ 09 января 2020

Необходимо проверить, является ли текущее значение i в поле для l oop NA, а не весь столбец relevantdata$age.

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