Я немного отредактировал ваш код:
library(shiny)
mod1 = function(p0,p1,alpha,power,alternative){
if (alternative == "one-sided"){
z1_value = qnorm(1-alpha)
z2_value = qnorm(power)
delta = p1-p0
size = ((z1_value*sqrt(p0*(1-p0))+z2_value*sqrt(p1*(1-p1)))/delta)^2
}
if (alternative == "two-sided"){
z1_value = qnorm(1-(alpha/2))
z2_value = qnorm(power)
delta = p1-p0
size = (((z1_value+z2_value)^2)*p1*(1-p1))/((delta)^2)
}
return(list(size = size))
}
ui <- shinyUI(fluidPage(
mainPanel(
numericInput("p0", "p0:",0.5, min = 0, max = 1, step = 0.1),
numericInput("p1", "p1:", 0.5,min = 0, max = 1, step = 0.1),
numericInput("alpha", "significant level:", 0.05,min = 0, max = 1, step = 0.01),
numericInput("power", "power:", 0.8,min = 0, max = 1, step = 0.1),
selectInput("alternative", "alternative:", choices = c("one-sided", "two-sided")),
textOutput("text_calc"))
))
server <- shinyServer(function(input, output,session){
output$text_calc <- renderText({
p0 <- input$p0
p1 <- input$p1
alpha <- input$alpha
power = input$power
alternative = input$alternative
paste("The result is =", mod1(p0, p1, alpha, power, alternative))
})
})
shinyApp(ui = ui, server = server)
Ваша функция mod1
может использоваться, если она загружена в глобальной среде, как указано выше. Альтернативой является разделение вашего приложения на разные файлы ui.R, server.R и global.R. Затем вы можете поместить все необходимые пакеты и функции в global.R. Это полезно, когда приложения становятся более сложными.
Я также добавил параметр шага в numericInputs и selectInput для «альтернативы», хотя это может быть переключатель и ниже:
radioButtons("alternative", "alternative:", choices = c("one-sided", "two-sided")),
Существуют и другие варианты, например, вы можете поместить код mod1 в renderText или использовать наблюдения и реактивы блеска, в зависимости от ваших предпочтений и того, как ваше приложение будет использоваться / его сложность.