Я пытаюсь определить переменную time_var_use
, которая будет другим столбцом данных, загруженных пользователем в приложение Shiny.Для начала эта переменная может быть равна другой переменной из этих данных, загруженных пользователем.Проблема в том, что эта переменная должна быть равна столбцу, указанному пользователем в input$time_var
, поэтому ее значения могут меняться в зависимости от того, какое имя столбца выберет пользователь.
Код приложения прост:
# 1. UI Design
ui <- dashboardPage(
dashboardHeader(title = "My app"),
dashboardSidebar(
sidebarMenu(
menuItem("Upload Data", tabName = "data_upload", icon = icon("folder-
open"))
)
),
dashboardBody(
tags$head(tags$style(HTML('.main-header .logo {
font-family: "Bliss Pro Light", Times, "Times New Roman", serif;
font-weight: bold;
font-size: 30px;
}
'))),
tabItems(
tabItem(tabName = "data_upload",
fluidRow(
box(title = "Modelling data", status = "primary",
fileInput(inputId = "main_data", label = "Upload the data for modelling", accept = c('.csv', 'text/comma-separated-values,text/plain', 'text/csv', 'csv')),
checkboxInput(inputId = "header", label = "The data has headers", value = TRUE),
radioButtons(inputId = "sep", label = "Delimiter:", choices = c("Comma" = ",","Semicolon" = ";","Tab" = "\t"), selected = ";")
)
),
fluidRow(
box(title = "Divide modelling data into estimation & validation sample", status = "primary", width = 12,
selectizeInput(inputId = "time_var", label = "Select the time variable", choices = "", multiple = FALSE),
selectizeInput(inputId = "time_threshold", label = "Select time threshold for estimation and validation", choices = "", multiple = FALSE)
)
)
)
)
)
)
# 2. Server Design
server <- function(input, output, session) {
model_data <- reactive({
infile <- input$main_data
if (is.null(infile))
return(NULL)
read.csv(infile$datapath, header = input$header, sep = input$sep,
stringsAsFactors = FALSE)
})
# update time_var choices
observe({
vchoices <- names(model_data())
updateSelectizeInput(session = session, inputId = "time_var", choices =
vchoices)
})
model_data_use <- reactive({
if (is.null(input$time_var))
return(NULL)
df <- model_data()
df$time_var_use <- df[, input$time_var]
df
})
observe({
tchoices <- names(model_data_use())
updateSelectizeInput(session = session, inputId = "time_threshold", choices
= tchoices)
})
}
# 3. Create ShinyApp
shinyApp(ui, server)
Кажется, проблема в выражении df$time_var_use <- df[, input$time_var]
, когда я пытаюсь определить новую переменную time_var_use
, равную выбранному столбцупользователем в input$time_var
, который может быть любым столбцом набора данных.Не могли бы вы посоветовать, как определить новые столбцы таким образом?
Я использую пример набора данных CSV:
time var1 var2 var3
1 2015q1 8 1 0.6355182
2 2015q1 12 0 0.5498784
3 2015q1 23 1 0.9130934
4 2015q1 152 1 0.8938210
5 2015q2 563 1 0.2335470
6 2015q3 8 0 0.5802677
7 2015q4 2 0 0.8514926
8 2016q1 1 1 0.4712101
9 2016q1 14 0 0.9747804
10 2016q1 13 1 0.8571699
11 2016q1 14 1 0.8738486
12 2016q2 53 0 0.8467971
13 2016q3 75 0 0.3191140
14 2016q4 15 0 0.9608926