Я пытаюсь создать блестящее приложение, которое выполняет следующие действия:
1) Просмотр файла значений, который выглядит как
Sample x y
A 1 3
B 2 1
C 3 6
D 4 4
2) Просмотр второго информационного файла,
Sample Country Status
A US OK
B UK OK
C UK NOPE
D US OK
3) Когда я нажимаю кнопку Submit
,
4) Я объединяю два файла по столбцу Sample
,
5) Создайте точечный график с помощью ggplot с выпадающим меню, которое позволяет мне раскрасить точки в соответствии с именами столбцов из информационного файла.
С кодом, приведенным ниже, я сталкиваюсь с двумя проблемами: (i) после того, как я загружаю свои файлы и нажимаю кнопку Submit
, ничего не происходит, и (ii) как я могу упомянуть в своем блоке selectInput
мой выпадающий список в меню количество возможных choices
(при условии, что я их заранее не знаю)?
library(shiny)
library(ggplot2)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput(
inputId = "user_value_file",
label = "Choose a file with numeric values"
),
fileInput(
inputId = "user_info_file",
label = "Choose a file with sample info"
),
actionButton(
inputId = "my_button",
label = "Submit"
)
),
mainPanel(
# browse sample annotation file
selectInput(
inputId = "info_col",
label = "Choose an info to color",
choices = c("Country", "Status") # I am cheating here because I know in advance what are the colnames of the info file
),
# outputs
plotOutput(
outputId = "my_scatter_plot"
)
)
)
)
server <- function(input, output) {
output$contents <- renderTable(
{
valueFile <- input$user_value_file
if (is.null(valueFile))
return(NULL)
infoFile <- input$user_info_file
if (is.null(infoFile))
return(NULL)
}
)
randomVals <- eventReactive(
input$goButton,
{
my_val <- read.table(valueFile$datapath, header = T, sep = "\t")
my_info <- read.table(infoFile$datapath, header = T, sep = "\t")
df <- merge(my_val, my_info, by="Sample")
output$my_scatter_plot <- renderPlot(
{
ggplot(df, aes_string(x=df$x, y=df$y, color=input$info_col)) +
geom_point()
}
)
}
)
}
shinyApp(ui = ui, server = server)