R 编程和闪亮的应用程序
R programming and shiny app
library(shiny)
library(shinythemes)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(radioButtons(
"fiscal","Quarter:",c("2015Q1","2015Q2","2015Q3","2015Q4","2016Q1"))),
mainPanel({
plotOutput('plot')
})))
server <- function (input , output )
{
myread <- function ()
{
inFile <- input$file1
if (is.null(inFile))
return(NULL)
mydata <- read.csv(inFile$datapath)
return (mydata)
}
plotType <- function(type)
{
switch(type)
Q12015 <- { mydataq1 <- reactive (myread())
x <- reactive(data.frame(mydataq1()))
y <- reactive ({x()[x()$Fiscal.Quarter=="2015Q1",]
resources <- factor (y()$Resource.Name)
stan <- tapply (y()$Standard.Hours,resources, sum , na.rm=TRUE)
bil <- tapply (y()$Billable.Hours,resources, sum , na.rm=TRUE)
bu <- bil*100 / stan
mp <- barplot (bu,col=colors(27),las=2,yaxt="n",ylim=c(0,200))
bu<- round(bu,2)
text(mp, bu,labels=bu, pos = 3)
})
output$plot <- renderPlot ({ y () })
}
Q22015= { mydataq1 <- reactive (myread())
x <- reactive(data.frame(mydataq1()))
y <- reactive ({x()[x()$Fiscal.Quarter=="2015Q2",]
resources <- factor (y()$Resource.Name)
stan <- tapply (y()$Standard.Hours,resources, sum , na.rm=TRUE)
bil <- tapply (y()$Billable.Hours,resources, sum , na.rm=TRUE)
bu <- bil*100 / stan
mp <- barplot (bu,col=colors(27),las=2,yaxt="n",ylim=c(0,200))
bu<- round(bu,2)
text(mp, bu,labels=bu, pos = 3)
})
output$plot <- renderPlot ({ y () })
}
Q32015 = { mydataq1 <- reactive (myread())
x <- reactive(data.frame(mydataq1()))
y <- reactive ({x()[x()$Fiscal.Quarter=="2015Q3",]
resources <- factor (y()$Resource.Name)
stan <- tapply (y()$Standard.Hours,resources, sum , na.rm=TRUE)
bil <- tapply (y()$Billable.Hours,resources, sum , na.rm=TRUE)
bu <- bil*100 / stan
mp <- barplot (bu,col=colors(27),las=2,yaxt="n",ylim=c(0,200))
bu<- round(bu,2)
text(mp, bu,labels=bu, pos = 3)
})
output$plot <- renderPlot ({ y () })
}
Q42015={
mydataq1 <- reactive (myread())
x <- reactive(data.frame(mydataq1()))
y <- reactive ({x()[x()$Fiscal.Quarter=="2015Q4",]
resources <- factor (y()$Resource.Name)
stan <- tapply (y()$Standard.Hours,resources, sum , na.rm=TRUE)
bil <- tapply (y()$Billable.Hours,resources, sum , na.rm=TRUE)
bu <- bil*100 / stan
mp <- barplot (bu,col=colors(27),las=2,yaxt="n",ylim=c(0,200))
bu<- round(bu,2)
text(mp, bu,labels=bu, pos = 3)
})
output$plot <- renderPlot ({ y () })
}
Q12016={
mydataq1 <- reactive (myread())
x <- reactive(data.frame(mydataq1()))
y <- reactive ({x()[x()$Fiscal.Quarter=="2015Q4",]
resources <- factor (y()$Resource.Name)
stan <- tapply (y()$Standard.Hours,resources, sum , na.rm=TRUE)
bil <- tapply (y()$Billable.Hours,resources, sum , na.rm=TRUE)
bu <- bil*100 / stan
mp <- barplot (bu,col=colors(27),las=2,yaxt="n",ylim=c(0,200))
bu<- round(bu,2)
text(mp, bu,labels=bu, pos = 3)
})
output$plot <- renderPlot ({ y () })
}
}
plotType(input$fiscal)
}
shinyApp(ui=ui ,server=server)
我已经编辑了我的代码。现在出现以下错误:-
.getReactiveEnvironment()$currentContext() 错误:
没有活动的反应上下文不允许操作。 (你试图做一些只能从反应式表达式或观察者内部完成的事情。)**
由于您没有明确说明为什么不同的地块需要不同的选项卡,因此用户只查看他们 select 所在季度的地块会更容易。
您的问题似乎是数据读入和格式化,您应该能够轻松调整下面的解决方案以满足您的具体需求。如果您有更具体的要求,请更新您的问题并提供可重现的示例。
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textInput("file1", label = "Input File"),
actionButton("loadFile", "Load"),
radioButtons("fiscal", "Quarter:", c("2015Q1","2015Q2","2015Q3","2015Q4","2016Q1"))
),
mainPanel({
plotOutput("plot")
})
)
)
server <- function (input, output){
mydata <- eventReactive(input$loadFile, {
validate(
need(input$file1, "Enter a valid filename!")
)
read.csv(input$file1)
})
output$plot <- renderPlot({
x <- mydata()
y <- x[x$Fiscal.Quarter == input$fiscal, ]
resources <- factor(y$Resource.Name)
stan <- tapply(y$Standard.Hours, resources, sum, na.rm = TRUE)
bil <- tapply(y$Billable.Hours, resources, sum, na.rm = TRUE)
bu <- bil*100 / stan
mp <- barplot (bu, col = colors(27), las = 2, yaxt = "n", ylim = c(0,200))
bu<- round(bu, 2)
text(mp, bu, labels = bu, pos = 3)
})
}
shinyApp(ui = ui, server = server)
library(shiny)
library(shinythemes)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(radioButtons(
"fiscal","Quarter:",c("2015Q1","2015Q2","2015Q3","2015Q4","2016Q1"))),
mainPanel({
plotOutput('plot')
})))
server <- function (input , output )
{
myread <- function ()
{
inFile <- input$file1
if (is.null(inFile))
return(NULL)
mydata <- read.csv(inFile$datapath)
return (mydata)
}
plotType <- function(type)
{
switch(type)
Q12015 <- { mydataq1 <- reactive (myread())
x <- reactive(data.frame(mydataq1()))
y <- reactive ({x()[x()$Fiscal.Quarter=="2015Q1",]
resources <- factor (y()$Resource.Name)
stan <- tapply (y()$Standard.Hours,resources, sum , na.rm=TRUE)
bil <- tapply (y()$Billable.Hours,resources, sum , na.rm=TRUE)
bu <- bil*100 / stan
mp <- barplot (bu,col=colors(27),las=2,yaxt="n",ylim=c(0,200))
bu<- round(bu,2)
text(mp, bu,labels=bu, pos = 3)
})
output$plot <- renderPlot ({ y () })
}
Q22015= { mydataq1 <- reactive (myread())
x <- reactive(data.frame(mydataq1()))
y <- reactive ({x()[x()$Fiscal.Quarter=="2015Q2",]
resources <- factor (y()$Resource.Name)
stan <- tapply (y()$Standard.Hours,resources, sum , na.rm=TRUE)
bil <- tapply (y()$Billable.Hours,resources, sum , na.rm=TRUE)
bu <- bil*100 / stan
mp <- barplot (bu,col=colors(27),las=2,yaxt="n",ylim=c(0,200))
bu<- round(bu,2)
text(mp, bu,labels=bu, pos = 3)
})
output$plot <- renderPlot ({ y () })
}
Q32015 = { mydataq1 <- reactive (myread())
x <- reactive(data.frame(mydataq1()))
y <- reactive ({x()[x()$Fiscal.Quarter=="2015Q3",]
resources <- factor (y()$Resource.Name)
stan <- tapply (y()$Standard.Hours,resources, sum , na.rm=TRUE)
bil <- tapply (y()$Billable.Hours,resources, sum , na.rm=TRUE)
bu <- bil*100 / stan
mp <- barplot (bu,col=colors(27),las=2,yaxt="n",ylim=c(0,200))
bu<- round(bu,2)
text(mp, bu,labels=bu, pos = 3)
})
output$plot <- renderPlot ({ y () })
}
Q42015={
mydataq1 <- reactive (myread())
x <- reactive(data.frame(mydataq1()))
y <- reactive ({x()[x()$Fiscal.Quarter=="2015Q4",]
resources <- factor (y()$Resource.Name)
stan <- tapply (y()$Standard.Hours,resources, sum , na.rm=TRUE)
bil <- tapply (y()$Billable.Hours,resources, sum , na.rm=TRUE)
bu <- bil*100 / stan
mp <- barplot (bu,col=colors(27),las=2,yaxt="n",ylim=c(0,200))
bu<- round(bu,2)
text(mp, bu,labels=bu, pos = 3)
})
output$plot <- renderPlot ({ y () })
}
Q12016={
mydataq1 <- reactive (myread())
x <- reactive(data.frame(mydataq1()))
y <- reactive ({x()[x()$Fiscal.Quarter=="2015Q4",]
resources <- factor (y()$Resource.Name)
stan <- tapply (y()$Standard.Hours,resources, sum , na.rm=TRUE)
bil <- tapply (y()$Billable.Hours,resources, sum , na.rm=TRUE)
bu <- bil*100 / stan
mp <- barplot (bu,col=colors(27),las=2,yaxt="n",ylim=c(0,200))
bu<- round(bu,2)
text(mp, bu,labels=bu, pos = 3)
})
output$plot <- renderPlot ({ y () })
}
}
plotType(input$fiscal)
}
shinyApp(ui=ui ,server=server)
我已经编辑了我的代码。现在出现以下错误:-
.getReactiveEnvironment()$currentContext() 错误: 没有活动的反应上下文不允许操作。 (你试图做一些只能从反应式表达式或观察者内部完成的事情。)**
由于您没有明确说明为什么不同的地块需要不同的选项卡,因此用户只查看他们 select 所在季度的地块会更容易。
您的问题似乎是数据读入和格式化,您应该能够轻松调整下面的解决方案以满足您的具体需求。如果您有更具体的要求,请更新您的问题并提供可重现的示例。
library(shiny)
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
textInput("file1", label = "Input File"),
actionButton("loadFile", "Load"),
radioButtons("fiscal", "Quarter:", c("2015Q1","2015Q2","2015Q3","2015Q4","2016Q1"))
),
mainPanel({
plotOutput("plot")
})
)
)
server <- function (input, output){
mydata <- eventReactive(input$loadFile, {
validate(
need(input$file1, "Enter a valid filename!")
)
read.csv(input$file1)
})
output$plot <- renderPlot({
x <- mydata()
y <- x[x$Fiscal.Quarter == input$fiscal, ]
resources <- factor(y$Resource.Name)
stan <- tapply(y$Standard.Hours, resources, sum, na.rm = TRUE)
bil <- tapply(y$Billable.Hours, resources, sum, na.rm = TRUE)
bu <- bil*100 / stan
mp <- barplot (bu, col = colors(27), las = 2, yaxt = "n", ylim = c(0,200))
bu<- round(bu, 2)
text(mp, bu, labels = bu, pos = 3)
})
}
shinyApp(ui = ui, server = server)