#r #shiny
#r #блестящий
Вопрос:
В настоящее время я занимаюсь личным проектом, чтобы привыкнуть к использованию R-shiny. Я использую penguins
набор данных в R. В этом проекте создается несколько разных графиков. Мне удалось создать основной код для отображения графиков, и теперь я пытаюсь использовать ввод флажка, чтобы позволить пользователю выбирать, хочет ли он, чтобы графики были разделены на исследуемые острова, или, скорее, просто видеть данные как таковые.
Мой код следующий.
library("palmerpenguins")
library("shiny")
library("ggplot2")
penguins.data<- penguins
sum(is.na(penguins))
#As their are a few penguins with missing values (19 out of 2752) we decide to carry out the data visualization with
#Only the complete cases of the data
penguins.data<-na.omit(penguins.data)
#Making sure the categorical variables are factors
str(penguins.data)
penguins.data$species<-as.factor(penguins.data$species)
penguins.data$sex<-as.factor(penguins.data$sex)
penguins.data$year<-as.factor(penguins.data$year)
penguins.data$island<-as.factor(penguins.data$island)
#Defining the UI for the App.
ui <- fluidPage(
#Adding a suitable title
titlePanel("Penguin exploration"),
#Getting the layout
sidebarLayout(
#Setting the panel for the used to select the inputs they want
sidebarPanel(
#Selecting the variable for the X-axis
selectInput("horiz", "Select x-axis variable:",
c("Sex" = "sex",
"Species" = "species",
"Year" = "year"),
selected = "sex" ),
#Selecting the variable in the Y-axis
selectInput("vert", "Select y-axis variable:",
c("Bill Length" = "bill_length_mm",
"Bill Depth" = "bill_depth_mm",
"Flipper length" = "flipper_length_mm",
"Body mass" = "body_mass_g"),
selected = "flipper_length_mm" ),
#We create the checkbox input for the user to select if they want to see the data in
checkboxInput("Divide", "check to look at how data is divided by Island Level", value = F)),
mainPanel(
#Setting a title for the output
h3("plot"),
#We decide how to name the plot to use it in the output
plotOutput("PengPlot")
),
)
)
server <- function(input, output) {
horizontal<-reactive(input$horiz)
vertical<-reactive(input$vert)
output$PengPlot <- renderPlot({
if(output$Divide){
ggplot(data = penguins.data, aes_string(horizontal(), vertical()))
geom_boxplot(aes(fill= island))
facet_wrap(~horizontal())
}else{
ggplot(data = penguins.data, aes_string(horizontal(), vertical()))
geom_boxplot()
}
})
}
shinyApp(ui = ui, server = server)
В настоящее время я получаю сообщение об ошибке Reading from shinyoutput object is not allowed.
, я не понимаю, что конкретно нужно делать. Я рассматриваю возможность создания обоих графиков как реактивных объектов, а затем использования функций if, но я видел в других сообщениях, что это может усложнить код.
Любой совет или помощь будут полезны. Заранее благодарю
Комментарии:
1. Ваше определение сервера содержит следующий код `if(вывод $ Divide)
, while you probably mean
if(ввод $Divide)`.2. Да, спасибо, это была проблема. Я подумал, что все, что я должен был связать в функции if с выводом на сервере, а не с вводом в пользовательском интерфейсе.