我想在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端试图传递基于无功输入的函数。
答案 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(
...
)