Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在RShiny服务器调用中调用函数,并将结果呈现为打印输出_R_Shiny_Shinydashboard_Shiny Reactivity - Fatal编程技术网

在RShiny服务器调用中调用函数,并将结果呈现为打印输出

在RShiny服务器调用中调用函数,并将结果呈现为打印输出,r,shiny,shinydashboard,shiny-reactivity,R,Shiny,Shinydashboard,Shiny Reactivity,我已经编写了一个脚本,它使用了两个函数来计算测试运行所需的持续时间,例如功率分析 输入和代码如下 ## RUN POWER CALCULATION average_daily_traffic <- 3515/30 control <- 0.47 uplift <- 0.02 num_vars <- 2 sample_size_calculator <- function(control, uplift){ variant <- (uplift + 1

我已经编写了一个脚本,它使用了两个函数来计算测试运行所需的持续时间,例如功率分析

输入和代码如下

## RUN POWER CALCULATION
average_daily_traffic <-  3515/30
control <- 0.47
uplift <- 0.02
num_vars <- 2 

sample_size_calculator <- function(control, uplift){
  variant <- (uplift + 1) * control
  baseline <- ES.h(control, variant)
  sample_size_output <- pwr.p.test(h = baseline,
                                   n = ,
                                   sig.level = 0.05,
                                   power = 0.8)
  if(variant >= 0)
  {return(sample_size_output)}
  else
  {paste("N/A")}
}


## RUN DAYS CALCULATOR FUNCTION 
days_calculator <- function(sample_size_output, average_daily_traffic){
  days_required <- c((sample_size_output)*num_vars)/(average_daily_traffic)
  if(days_required >= 0)
  {paste0("It will take ", round(days_required, digits = 0)*num_vars, " days for this test to reach significance, with a daily average of " , round(average_daily_traffic, digits = 0), " visitors to this page over a 30 day period.")}
  else
  {paste("N/A")}
}


## RUN FUNCTIONS AND OUTPUT ANSWER
sample_size_calculator <- sample_size_calculator(control, uplift)
sample_size_output <-   sample_size_calculator$n

answer <- days_calculator(sample_size_output, average_daily_traffic)
answer
library(shiny)

ui <- fluidPage(

  actionButton("exe", "Run", 
               style="color: #fff; background-color: #337ab7; border-color: #2e6da4"),



  mainPanel(

    textOutput("answer")

  ))


server <- function(input, output, session) {

  sample_size_calculator <- eventReactive(input$exe,{

    average_daily_traffic <-  3515/30
    control <- 0.47
    uplift <- 0.02
    num_vars <- 2 

    variant <- (uplift + 1) * control
    baseline <- ES.h(control, variant)
    sample_size_output <- pwr.p.test(h = baseline,
                                     n = ,
                                     sig.level = 0.05,
                                     power = 0.8)
    if(variant >= 0)
    {return(sample_size_output)}
    else
    {paste("N/A")}

  })

  days_calculator <- eventReactive  (input$exe,{
    days_required <- c((sample_size_output)*num_vars)/(average_daily_traffic)
    if(days_required >= 0)
    {paste0("It will take approximately ", round(days_required, digits = 0)*num_vars, " days or ", round((round(days_required, digits = 0)*num_vars)/365, digits = 1) ," years for this test to reach significance, based on a daily average of " , round(average_daily_traffic, digits = 0), " users to this page in the last 30 days.")}
    else
    {paste("N/A")}
  })

  outputs_ <- eventReactive( input$exe, {
    req(sample_size_calculator())
    req(days_calculator())
  sample_size_calculator <- sample_size_calculator(control, uplift)
  sample_size_output <-   sample_size_calculator$n


  answer <- days_calculator(sample_size_output, average_daily_traffic)

  output$answer <- renderText(outputs_$answer) 

})

}


shinyApp(ui = ui, server = server)

一些可能有用的建议

  • 在添加所有计算之前,将从一个简化的闪亮应用程序开始,现在可能更容易使用
  • 避免将
    output
    语句放入
    eventReactive
    中。例如,见下文
  • 考虑对按钮按下只使用一个而不是多个
    observeEvent
    eventReactive
    ,特别是因为某些功能结果依赖于其他功能
  • 现在没有输入,所以不需要额外的
    reactive
    表达式。但是,当您添加输入时,您可能会这样做
如果还没有,请在和上查看R Studio Shining教程

希望这对未来有所帮助

library(shiny)
library(pwr)

ui <- fluidPage(
  actionButton("exe", "Run", style="color: #fff; background-color: #337ab7; border-color: #2e6da4"),
  mainPanel(
    textOutput("answer")
  )
)

server <- function(input, output, session) {

  average_daily_traffic <-  3515/30
  control <- 0.47
  uplift <- 0.02
  num_vars <- 2 

  sample_size_calculator <- function() {
    variant <- (uplift + 1) * control
    baseline <- ES.h(control, variant)
    sample_size_output <- pwr.p.test(h = baseline,
                                     n = ,
                                     sig.level = 0.05,
                                     power = 0.8)
    if(variant >= 0)
      {return(sample_size_output)}
    else
      {return(NA)}
  }

  days_calculator <- function (sample_size_output, average_daily_traffic) {
    days_required <- c((sample_size_output)*num_vars)/(average_daily_traffic)
    if(days_required >= 0)
      {paste0("It will take approximately ", round(days_required, digits = 0)*num_vars, " days or ", round((round(days_required, digits = 0)*num_vars)/365, digits = 1) ," years for this test to reach significance, based on a daily average of " , round(average_daily_traffic, digits = 0), " users to this page in the last 30 days.")}
    else
      {paste("N/A")}
  }

  calc_answer <- eventReactive(input$exe, {
    sample_size_calculator <- sample_size_calculator()
    sample_size_output <- sample_size_calculator$n
    days_calculator(sample_size_output, average_daily_traffic)
  })

  output$answer <- renderText(calc_answer()) 

}

shinyApp(ui = ui, server = server)
库(闪亮)
图书馆(压水堆)

谢谢你,本!这是一个很大的帮助,非常感谢。然而,现在的问题是,“平均每日流量”和“控制”的值实际上本身就是通过API从Google Analytics检索数据的函数的输出。这就是你所说的“没有输入,所以不需要额外的反应式表达式”吗?当我将这个答案合并到我当前的代码中时,我得到了错误“警告:天内出错\u计算器:未使用的参数(样本大小\u输出,平均\u每日\u流量)”可以理解的重新输入。是的,我将修改问题,使之包括现在的代码。提前谢谢。我现在已经包括了完整的代码。担心现在有点混乱,您将无法复制数据本身,因此请提出任何问题。转到聊天:
library(shiny)
library(pwr)

ui <- fluidPage(
  actionButton("exe", "Run", style="color: #fff; background-color: #337ab7; border-color: #2e6da4"),
  mainPanel(
    textOutput("answer")
  )
)

server <- function(input, output, session) {

  average_daily_traffic <-  3515/30
  control <- 0.47
  uplift <- 0.02
  num_vars <- 2 

  sample_size_calculator <- function() {
    variant <- (uplift + 1) * control
    baseline <- ES.h(control, variant)
    sample_size_output <- pwr.p.test(h = baseline,
                                     n = ,
                                     sig.level = 0.05,
                                     power = 0.8)
    if(variant >= 0)
      {return(sample_size_output)}
    else
      {return(NA)}
  }

  days_calculator <- function (sample_size_output, average_daily_traffic) {
    days_required <- c((sample_size_output)*num_vars)/(average_daily_traffic)
    if(days_required >= 0)
      {paste0("It will take approximately ", round(days_required, digits = 0)*num_vars, " days or ", round((round(days_required, digits = 0)*num_vars)/365, digits = 1) ," years for this test to reach significance, based on a daily average of " , round(average_daily_traffic, digits = 0), " users to this page in the last 30 days.")}
    else
      {paste("N/A")}
  }

  calc_answer <- eventReactive(input$exe, {
    sample_size_calculator <- sample_size_calculator()
    sample_size_output <- sample_size_calculator$n
    days_calculator(sample_size_output, average_daily_traffic)
  })

  output$answer <- renderText(calc_answer()) 

}

shinyApp(ui = ui, server = server)