Как написать сложные математические функции в блестящей - PullRequest
0 голосов
/ 05 июля 2019

Я хочу написать блестящую wabpage, которая рассчитывает размер выборки для клинических данных.Я выполнил функцию вычисления, но я не знаю, как мне добавить эту функцию в блестящий процесс.

Это мой блестящий код, который показывает простой процесс вычисления.Он может работать, но я не знаю, как рассчитать сложные формулы.

library(shiny)
ui <- shinyUI(fluidPage(
  mainPanel(
numericInput("p0", "p0:",0.5, min = 0, max = 1),
numericInput("p1", "p1:", 0.5,min = 0, max = 1),
numericInput("alpha", "significant level:", 0.05,min = 0, max = 1),
numericInput("power", "power:", 0.8,min = 0, max = 1),
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
paste("The result is =", p0+p1+alpha+power)
  })
})
shinyApp(ui = ui, server = server)


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))
}

Как мне объединить два кода вместе и сделать блестящий для расчета?Спасибо!

1 Ответ

0 голосов
/ 05 июля 2019

Я немного отредактировал ваш код:

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 или использовать наблюдения и реактивы блеска, в зависимости от ваших предпочтений и того, как ваше приложение будет использоваться / его сложность.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...