Возникли проблемы при получении таблицы мозаики 2x2 для отображения в R-Shiny - PullRequest
0 голосов
/ 17 июня 2019

необработанные данные Я создаю приложение Rshiny, которое позволит пользователю загружать некоторые клинические данные и просматривать несколько различных графиков на основе открытых вкладок.К ним относятся линейный график, круговая диаграмма и мозаичный график.Я могу просматривать линейный график и круговую диаграмму на основе загруженных данных и пользовательских данных, но у меня возникают проблемы с отображением мозаичного графика.Я получаю сообщение об ошибке «вход объекта» не найден ».

Я попытался использовать ggmosaic (geom_mosaic) и структурируемые пакеты в R для отображения графика.В моей интересующей таблице данных есть 5 столбцов: REF (результат эталонного метода для таблицы непредвиденных обстоятельств 2x2, который является двоичным - клинический результат POS или NEG), Результат (4 различных значения: True Positive, False отрицательный, True отрицательный,ложно положительный), Значение (число пациентов для каждого результата), SampleType (тип образца пациента - NS, NP, В целом - 3 возможных значения данных для этого столбца) и Comparator (POS или NEG клинический результат).В скобках я включил типы значений, которые можно ожидать для каждого столбца.Кроме того, для моего приложения R глянцевая мозаика R у меня есть несколько пользовательских вводов с левой стороны, что позволит создавать приложение после того, как пользователь их выберет: выберите вход для столбца REF, выберите вход для столбца типа образца, выберите входдля компаратора.У меня есть код, написанный внутри серверной функции, которая использует эти 3 входа для построения мозаичного графика.

РЕДАКТИРОВАТЬ: я прикрепил свои необработанные данные в ссылку в самом верху под названием «необработанные данные».

таблица данных мозаичного графика - берет данные из круговой диаграммы, но отображает их в #different визуальном формате

  MosaicDF <- reactive({

    #display mosaic 
    Mosaic_filtered <- select(PieData_extracted(),-c(3,5:7))



    #data transformation
    names(Mosaic_filtered)[1]<-"REF"
    Mosaic_filtered$SampleType <- "NS"
    Mosaic_filtered$Comparator <- c("POS","NEG","NEG","POS")
    Mosaic_filtered$REF <- c("POS","POS","NEG","NEG")
    Mosaic_filtered$F2 <- factor(as.character(Mosaic_filtered$Value))
    MYRaw <- Mosaic_filtered[rep(rownames(Mosaic_filtered),as.numeric(as.character(Mosaic_filtered$F2))), ]
    MYRaw <- as.data.frame(MYRaw)

    #update select input for mosaic plot
    updateSelectInput(session, inputId = 'REF', label = 'Select Reference column',
                      choices = names(MYRaw), selected = "")
    updateSelectInput(session, inputId = 'SampleType', label = 'Select Sample Type column',
                      choices = names(MYRaw), selected = "")
    updateSelectInput(session, inputId = 'Comparator', label = 'Select Comparator column',
                      choices = names(MYRaw), selected = "")

    return(MYRaw)

  })


 #display mosaic plot

  output$mosaic <- renderPlot({

    ggplot(data=MosaicDF())+geom_mosaic(aes(x=product(input$REF,input$Comparator),fill=input$REF))+labs(x="Comparator",y="REF")
  })

}

Я получаю таблицу данных (из которой построен мозаичный график) в видевывод, но сам мозаичный сюжет не будет отображаться.Там написано:

«Ошибка: ввод объекта не найден».

Таблица данных круговой диаграммы и сама круговая диаграмма отображаются на вкладке для этого графика.(Для каждого из графиков в приложении Riny есть 3 вкладки, из которых пользователь может выбрать любой из них, выбрать некоторые входные данные в раскрывающемся меню и разрешить автоматическое создание приложения на основе входных данных).

Мне интересно, есть ли способ изменить код для моей таблицы реактивных данных или для самого графика - я должен изменить свой код для ggplot или использовать другой пакет мозаики для формата Rshiny?

1 Ответ

0 голосов
/ 18 июня 2019

Без предоставления примера, состоящего из данных и кода, которые люди могут копировать и запускать для надежного воспроизведения вашей ошибки, трудно сказать, что (а) идет (а) идет не так.

Однако, вот пример блестящего приложения, основанного на титаническом примере на странице справки для geom_mosaic().

library(ggmosaic)
library(rlang)
library(shiny)

ui <- fluidPage(

    sidebarLayout(
        sidebarPanel(
            selectInput("REF", "REF", "Survived"), 
            selectInput("Comparator", "Comparator", c("Class", "Sex", "Age"))
        ),

        mainPanel(
           plotOutput("old_mosaic"), 
           plotOutput("new_mosaic")
        )
    )
)

server <- function(input, output) {
    titanic_data <- reactive({
        data(Titanic)
        titanic <- as.data.frame(Titanic)
        titanic$Survived <- factor(titanic$Survived, levels=c("Yes", "No"))
        titanic
    })

    output$old_mosaic <- renderPlot({
        ggplot(data = titanic_data()) + 
            geom_mosaic(aes(weight = Freq, x = product(input$REF, input$Comparator), fill = input$REF)) + 
            labs(title = "Old Way")
    })

    output$new_mosaic <- renderPlot({
        ggplot(data=titanic_data()) +
            geom_mosaic(aes(weight = Freq, x = product(!!sym(input$REF), !!sym(input$Comparator)), fill = !!sym(input$REF))) + 
            labs(title = "New Way")
    })
}

shinyApp(ui, server)

Код, который создает первый график, похож на ваш код ggplot, который пытается использовать входные $ id (s) как есть. На моей машине этот первый график выдает ошибку, которую вы описываете, а в других случаях кажется, что этот подход выдает ту же ошибку .

На момент написания этой статьи было принято решение заменить aes_string() вместо aes(). Однако здесь мы не должны этого делать, потому что aes_string() мягко осуждается; и что еще более важно, мы не можем просто использовать aes_string(), потому что нам все еще нужно бороться с элементом product().

Возвращаясь к примеру приложения, обратите внимание, что второй график отображается без проблем. В этом коде я использовал новый идиоматический способ , который преобразует входную строку в символ, а затем выводит ее в кавычки.

Поэтому, если я прав, и это является источником вашей ошибки, тогда вам следует обернуть каждую input$id !!sym() в свой код ggplot.

...