我对R-Shiny相当陌生,我正尝试使用我在R-Shiny中用R编写的代码。由于代码最初是用R编写的,因此在R-Shiny中使用的语法面临很多困难。
我想知道是否有一种更有效的方法,不必重新编写整个代码即可得出不同的结果。
例如,我的R-Shiny的格式是这样的:
ui <- fluidPage(
#my input Buttons/sliders( ),
#output functions (I am using 3 outputs)
plotOutput("Hindcast"),
plotOutput("Histogram"),
plotOutput("Pval")
)
server<-function(input,output) {
output$Hindcast<-renderPlot({
#Here I write my code
plot(#required output for "Hindcast")
})
output$Histogram <- renderPlot({
#Here I am required to write most of the code again
#I tried using the reactive function, but the way my code is built, it would
require too many reactive functions
plot...
})
output$Pval <- renderPlot({
#entire code again
plot...
})
shinyApp(ui=ui, server)
我应该在这里上传我的代码,但是它太长了,问题不在于编码,而在于语法。
帮助表示赞赏。
答案 0 :(得分:0)
很难在没有实际代码的情况下明确注释,但这是一些有关反应式编程的良好资源的链接。
https://www.rstudio.com/resources/webinars/shiny-developer-conference/
前两个视频是金矿。
通常,您的应用程序中永远不应包含任何重复代码。而且我不明白为什么当原始应用程序具有重复代码时,为什么需要多个反应功能。
计划任何应用程序的第一步是要牢记(或在纸面上)存在的反应依赖性,即我的inputs
所依赖的outputs
是什么。
第二,考虑问题“所有地块共有什么代码?”。由于存在多个图,基本假设是必须进行某些更改才能生成不同的图。在此之前,我们先获取所有代码,然后将其称为“共享代码”。
最后,我们将前两点结合起来,以确保在不使用冗余代码的情况下保留依赖关系。
这是一个带有冗余代码的简单示例。
library(shiny)
library(dplyr)
data = mtcars
shinyApp(ui = {
fluidPage(
sliderInput("selectHP","Select Horse Power",min(data$hp),max(data$hp),data$hp),
sliderInput("selectCyl","Select Cylinders",min(data$cyl),max(data$cyl),data$cyl),
sliderInput("mpg","Select MPG Range",min(data$mpg),max(data$mpg),data$mpg),
plotOutput("hp_mpg"),
plotOutput("cyl_mpg")
)
},
server = function(input,output){
output$hp_mpg = renderPlot({
#Shared Code
data = data%>%
filter(between(hp,input$selectHP[1],input$selectHP[2]))%>%
filter(between(cyl,input$selectCyl[1],input$selectCyl[2]))%>%
filter(between(mpg,input$mpg[1],input$mpg[2]))
plot(data$hp,data$mpg)
})
output$cyl_mpg = renderPlot({
#Shared Code
data = data%>%
filter(between(hp,input$selectHP[1],input$selectHP[2]))%>%
filter(between(cyl,input$selectCyl[1],input$selectCyl[2]))%>%
filter(between(mpg,input$mpg[1],input$mpg[2]))
plot(data$hp,data$cyl)
})
})
library(shiny)
library(dplyr)
data = mtcars
shinyApp(ui = {
fluidPage(
sliderInput("selectHP","Select Horse Power",min(data$hp),max(data$hp),data$hp),
sliderInput("selectCyl","Select Cylinders",min(data$cyl),max(data$cyl),data$cyl),
sliderInput("mpg","Select MPG Range",min(data$mpg),max(data$mpg),data$mpg),
plotOutput("hp_mpg"),
plotOutput("cyl_mpg")
)
},
server = function(input,output){
data_reactive = reactive({
data = data%>%
filter(between(hp,input$selectHP[1],input$selectHP[2]))%>%
filter(between(cyl,input$selectCyl[1],input$selectCyl[2]))%>%
filter(between(mpg,input$mpg[1],input$mpg[2]))
return(data)
})
output$hp_mpg = renderPlot({
plot(data_reactive()$hp,data_reactive()$mpg)
})
output$cyl_mpg = renderPlot({
plot(data_reactive()$hp,data_reactive()$cyl)
})
})