Возникли проблемы при получении таблицы мозаики 2x2 для отображения в R-Shiny

Необработанные данные Я создаю приложение 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")
  })

}

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

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

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

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

1 ответ

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

Тем не менее, вот пример блестящего приложения на основе титанического примера на странице справки для 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.

Другие вопросы по тегам