У меня есть блестящий server.R, который пытается сделать следующее:Блестящие и условные операторы
У меня есть selectInput на боковой панели, что позволяет пользователю выбрать один из 2-х условий, которые впоследствии изменения пользовательского интерфейса, который состоит из условных панелей, по одному для каждого условия.
Мой server.R устанавливается следующим образом:
if (input$option1) {return()}
else{run code corresponding to option 2 which outputs reactive variable 2}
if (input$option2) {return()}
else{run code corresponding to option 1 which outputs reactive variable 1}
.
.
.
run another function that depends on variable 1 or variable 2, depending on which input is chosen above
Причина выше код не работает, потому что для того, чтобы сослаться на вход $ опционного *, я должен быть реактива Окружающая среда. Но ясно, что я не могу поместить его в вызов isolate(), потому что мне нужно, чтобы пользовательский интерфейс отвечал на ввод пользователя. И ясно, что я не могу поместить его в вызов observ(), потому что мне нужно иметь возможность выводить переменную 1 или переменную 2 в зависимости от условной логики. Итак, как мне добиться того, чего я пытаюсь достичь? Я могу предоставить свой код, если это необходимо, но я думаю, что это скорее проблема дизайна/программы.
Спасибо. Код ниже:
runApp(list(
ui = fluidPage(
headerPanel("App"),
sidebarPanel(
selectInput(
"simtype",
"Select Simulation Type",
c(SingleSubject = "SS", FromFile = "FF"),
selected = "FF",
multiple = FALSE
),
conditionalPanel(
condition = "input.simtype=='FF' ",
fileInput(
'file1',
'Upload File Here',
accept = c('text/csv', 'text/comma-separated-values,text/plain', '.csv')
),
# tags$hr(),
checkboxInput('header', 'Header', TRUE),
radioButtons(
'sep',
'Separator',
c(
Comma = ',',
Semicolon = ';',
Tab = '\t'
),
'Comma'
),
uiOutput('varselect1')
),
conditionalPanel(
condition = "input.simtype== 'SS' ",
aceEditor(
"text",
"",
mode = "r",
theme = "twilight",
height = "40px",
fontSize = 10
),
uiOutput('varselect2')
)
),
mainPanel(#uiOutput('tabs')
tabsetPanel(
tabPanel(title = 'FILE', value = "filetab", tableOutput("filetable")),
tabPanel(
title = "SUMMARY",
value = "summarytab",
dataTableOutput("summarytable")
),
id = "tabs"
))
),
server = function(input, output) {
if (input$simtype == "SS") {
return()
} else{
file <- reactive({
file <- input$file1
})
output$filetable <- renderTable({
file()
})
} #end if
output$varselect1 <- renderUI({
if (is.null(input$file1$datapath)) {
return()
}
list(actionButton("goButton", 'GO'),
numericInput("s1", "Input value 1", NULL))
}) # end renderUI()
if (input$simtype == "FF") {
return()
} else{
get.text <- reactive({
input$text
})
output$filetable <- renderTable({
X <- read.table(text = get.text())
X
}) # end renderTable()
} #end if
output$varselect2 <- renderUI({
if (input$text == "") {
return()
}
list(numericInput("s0", "Input value", NULL),
actionButton("goButton", 'GO'))
})
#end renderUI()
mydata <- reactive({
input$goButton
if (input$simtype == "FF") {
variable = file()
} else {
variable = X()
}
}) #end mydata()
output$summarytable <- renderDataTable({
variable
})
}
))
Непонятно, где именно у вас есть этот код или что вы ожидаете от него. Было бы неплохо, если бы вы могли создать минимальный воспроизводимый пример, который может запускаться, чтобы точно увидеть, что вы делаете, и проверить возможные решения/альтернативы. (В идеале вызов 'runApp' со списком для функций' ui = 'и' server = ', как внизу справочной страницы'? RunApp'.) – MrFlick
Хорошо, я могу это сделать. – yahooligan8
Кажется, есть много синтаксических ошибок, если я пытаюсь скопировать/вставить это в R, чтобы он не был запущен. Также у вас возникла проблема с синтаксисом 'if/else'. Если ваш оператор if выполняет блок ('{..}'), 'else', но начинается с той же строки, что и закрывающая'} '. Он не может начинаться с новой строки. В противном случае это может быть неоднозначно относительно того, где принадлежит другое. – MrFlick