调用自定义函数将输入传递给函数参数Shiny

时间:2018-01-26 16:06:46

标签: r ggplot2 shiny

我想在Shiny中传递输入作为参数,以便我可以根据用户选择提取必要的文件。这是可能的还是我必须在运行应用程序之前加入文件?该函数是子集数据部分中的下面的MyFunction。

library(shiny)


ui <- fluidPage(
  titlePanel("Title"),

  sidebarLayout(
    sidebarPanel(position = "left",
             selectInput(inputId = "competitor",
                         label = h3("Competitor:"), 
                         choices = unique(Grouped$variable1),
                         selected = "1"),

              selectInput(inputId = "state",
                        label = h3("State:"), 
                        choices = c("IA","MA","PA","CA","MD","TN"),
                        selected = "CA")),

mainPanel(plotOutput(outputId = "lineplot", height = "400px"))
  )
)


server <- function(input, output) {

  # Subset data
  reactive({
    MyFunction(input$state)})  

  selected_company <- reactive({
    Grouped %>%
      filter(Variable2 == input$competitor)})

  output$lineplot <- renderPlot({
    ggplot(selected_company(),aes(x=Month, y=Rate)) +
      geom_bar(stat="identity",fill="blue") +
      theme_classic()

    })
}

# Create Shiny object
shinyApp(ui = ui, server = server)

基本上,我是按州提取文件的。然后我操纵该文件以在应用程序中以图形形式显示特定指标,并添加用户选择他们希望看到的“竞争对手”。

我会给你完整的功能,但考虑到许多变量的专有性,可能不值得花时间重新格式化去除它们,因为它是一个很长的功能。但是,该功能可以正常工作。

问题出在Shiny端试图传递基于无功输入的函数。

1 个答案:

答案 0 :(得分:0)

如果要在input$state更改时重新运行该功能,请使用

observe({MyFunction(req(input$state))})})

req部分确保输入在传递给函数之前可用(不是NULL)。你编码的方式,即

reactive({MyFunction(input$state)})  

该函数永远不会运行,因为没有创建被动反应的观察者。关于加入文件:您只需source定义函数的文件,如此

# app.R
source("path/to/my_function/definition.R")

shinyApp(
  ...
)