R Shiny: «Реактивный» анализ данных на основе пользовательского ввода с последующим выводом рисунка ggplot - PullRequest
1 голос
/ 05 марта 2020

У меня есть базовый код c R, в котором пользователь может ввести название страны "Аргентина". Используя это значение / имя, код запустит анализ для поднабора «Аргентина» предварительно загруженных данных. Наконец, код выдаст простой ggplot, показывающий результаты.

Я попытался превратить этот код в блестящее приложение, однако не могу заставить его работать должным образом. Моя главная проблема заключается в том, что я не могу заставить работать анализ данных в разделе «Сервер», который впоследствии должен быть введен в код построения. Что еще более важно, мне кажется, что я не могу заставить введенное пользователем название страны влиять на мой анализ данных.

Не вдаваясь в детали кода, кто-то может указать мне правильное направление того, как это сделать. в блестящем? например,

  1. Поле для ввода данных пользователем;

  2. Использовать этот пользовательский ввод как объект, используемый в коде;

  3. затем запустить анализ (каким бы он ни был); и

  4. используйте фрейм данных окончательного анализа в ggplot для вывода рисунка для отображения в блестящем приложении.

См. мой блестящий код используется в настоящее время с воспроизводимыми данными с использованием MTcars

library(shiny)

# Some Sample data to run app using mtcars
mtcars$Primary<- rownames(mtcars)
mtcars$Area <- "Argentina"
mtcars$Y2016<- mtcars$mpg
mtcars$Element <- "Gross Production Value (constant 2004-2006 million US$)"

# Defining UI ----
ui <- pageWithSidebar(

          # App title ----
          headerPanel("Subsector Selection Tool"),

          # Sidebar panel for inputs ----
          sidebarPanel(

            # Input: Country name
            textInput("country", "Please enter country name", "")#,
          ),

          # Main panel for displaying outputs ----
          mainPanel("")
)


# Define server logic to plot various variables against mpg ----
server <- function(input, output) {

 #Trying to make user inputed country name into an object to be used in 
 "reactive" code below, which in turn is be used to make dataset for graphing
 country_interest <- reactive({
 paste(input$country)
 })


#Here I am trying to make the data analysis code run and create desired 
dataset for graphing, and subsetting for country selected by user
Value_c_e_PRIM_x  <- reactive({

Value_c <- Value[which(Value$Area==country_interest),]
Value_c_e <- Value_c[which(Value_c$Element=="Gross Production Value (constant 2004-2006 million US$)"),]
Value_c_e_PRIM$Primary <- Value_c_e_PRIM[,120]
Value_c_e_PRIM[,120] <- NULL

Value_c_e_PRIM <-  Value_c_e_PRIM %>% group_by(Primary,Element) %>% summarise_at(vars(Y2016), sum)

Value_c_e_PRIM$Category <- "Value of Production"
Value_c_e_PRIM$Value <- Value_c_e_PRIM$Y2016
Value_c_e_PRIM <-  Value_c_e_PRIM %>% group_by(Category,Primary) %>% summarise_at(vars(Value), mean)

})


#Graphing section, if  Ihave the dataset "Value_c_e_PRIM_x" pre-loaded (e.g. not derived in code above), the figure is successfully shown in the output.
output$plot <- renderPlot({

Graph_data <- Value_c_e_PRIM_x 
Graph_data$Score_type <- "Competitiveness Score"
Graph_data$`Competitiveness Score` <- round(Graph_data$Value, 2)

title1 <-paste("Competitiveness\nby",paste0(country_interest),"Subsector")
mycol <-c("red", "yellow", "#006600")

ggplot(data = Graph_data, aes(x = Score_type, y = reorder(Primary,Value), fill=Value)) +
  geom_tile(aes(fill = Value), colour= "white")+
  geom_text(data=Graph_data,aes(y=Primary, x= Score_type, label=Value))+
  labs(title =(paste0(title1)),y = "", x = "")+
  scale_fill_gradientn(colours = mycol)+
  theme(legend.title=element_blank())+
  theme(legend.position="bottom")

 })
}

shinyApp(ui, server)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...