Неправильно определять выходной объект внутри observeEvent
.В этом случае, независимо от выбора способа переключения изображений, я бы посоветовал использовать eventReactive
- назовем это myval
.Это создает реактив, который изменяется только при наступлении определенного события, в этом случае нажмите кнопку «Отправить».Затем мы можем сослаться на это в теле оператора renderText
, так что это может просто стать:
output$textR<-renderText({
print(myval())
})
Во-вторых, для вывода изображений вы должны поместить их в каталог www
,см здесь .Затем мы можем создать элемент пользовательского интерфейса с renderUI
и UIOutput
, в котором мы используем значение нашего eventReactive
myval()
, чтобы выбрать изображение для отображения.
Рабочий пример приведен ниже.Обратите внимание, что я сохранил его как app.R и использовал структуру папок по указанной ссылке, поэтому:
| shinyApp/
| app.R
| www/
| zorro.jpg
| notzorro.jpg
Надеюсь, это поможет!
library(shiny)
# Define UI for application that draws a histogram
ui <- fluidPage(
# Application title
titlePanel("Myapp"),
#Inputs
dateInput(inputId = "dob", label="Birth"),
dateInput(inputId = "ad", label="Date"),
actionButton("Submit", icon("fas fa-magic"), label="Submit"),
#Outputs
textOutput(outputId = "textR"),
uiOutput(outputId = "my_ui")
)
# Define server logic required to draw a histogram
server <- function(input, output) {
myval <- eventReactive(input$Submit,
{
v1<-as.numeric(as.Date(input$ad,format="%Y/%m/%d") - as.Date(input$dob, format="%Y/%m/%d"))/30.5
return(ifelse(v1>48, "type1", "type2"))
})
output$textR<-renderText({
print(myval())
})
output$my_ui<-renderUI({
if(myval()=='type1')
img(src='zorro.jpg', height = '300px')
else
img(src='notzorro.jpg', height = '300px')
})
}
# Run the application
shinyApp(ui = ui, server = server)