我被要求做一个简单的闪亮应用程序。我有以下代码:
library(shiny)
ui <- fluidPage(
tabsetPanel(
tabPanel(title = "Central Limit Theorem",
sliderInput(inputId = "num", label = "Choose a sample size",
value = 5, min = 1, max = 50),
plotOutput(outputId = "hist")
)
,
tabPanel(title = "BMI prediction",
pageWithSidebar(
# Application title
headerPanel("BMI prediction"),
sidebarPanel(
numericInput('wt', 'Weight in Pounds', 90, min = 50, max = 200),
submitButton('Submit'),
numericInput('ht', 'Height in Inches', 60, min = 50, max = 85),
submitButton('Submit')
),
mainPanel(
h3('Results of prediction'),
h4('Your weight is'),
verbatimTextOutput("inputValue1"),
h4('Your height is'),
verbatimTextOutput("inputValue2"),
h4('Which resulted in a BMI of '),
verbatimTextOutput("prediction")
)
)
)
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
output$hist <- renderPlot({
par(mfrow = c(1,2))
r <- 10000
samp <- matrix(rexp(n=(input$num)*r, rate = 2), nrow = r)
sample.means <- apply(samp,1,mean)
hist(sample.means,col="purple", main="Sampling Distribution of the Sample Mean",
xlab = "Sample Mean")
qqnorm(sample.means, col = "purple")
})
bmi_calc <- function(weight, height) (weight/height^2)*703
output$inputValue1 <- renderPrint({input$wt})
output$inputValue2 <- renderPrint({input$ht})
output$prediction <- renderPrint({bmi_calc(input$wt, input$ht)})
}
shinyApp(ui = ui, server = server)
由于某种原因,第一个选项卡中的直方图不响应滑块。如果我不包含第二个标签,则可以正常使用。
答案 0 :(得分:1)
这是两个submitButton
;如果您单击第二个选项卡上的任一按钮并返回第一个选项卡,它将更新。不幸的是,我认为有一种方法可以指定submitButton
更新哪些输入(当前两个输入都适用于所有三个输入,因此第二个选项卡上的两个输入是多余的)。但是,有一些选择:
submitButton
,这将无害(除非一个资源非常紧张)更新所有输入。submitButton
放在tabsetPanel
之外,以便一个按钮可以更新所有三个输入。actionButton
更新您明确喜欢的任何值。这种方法可以让您更精确地控制何时更新,但代价是需要更多的代码工作。如果您的小部件需要大量资源而您不想过度更新,那么这是最佳选择。