【发布时间】:2018-11-20 00:24:46
【问题描述】:
我有一个用 R 语言开发的算法。假设它有 5000 行代码。现在我将它转换为一个 R Shiny 应用程序,但我可以让代码工作的唯一方法是在几乎 每一 行代码上放置一个 REACTIVE 函数。一定有更简单的方法!
这是一个高度简化的版本。这是ui.R代码:
library(shiny)
shinyUI(fluidPage(
# application titles
titlePanel("Calculate Next 3 Integers Above Specified Integer"),
# sidebar panel
sidebarLayout(
sidebarPanel(numericInput("int", "Enter integer", value="")),
# main output
mainPanel(textOutput("int1"),
textOutput("int2"),
textOutput("int3"))
)))
这里是 server.R 代码:
shinyServer(function(input, output){
int <- reactive({as.numeric(input$int)})
int1 = reactive({int() + 1})
int2 = reactive({int() + 2})
int3 = reactive({int() + 3})
output$int1 <- renderText(int1())
output$int2 <- renderText(int2())
output$int3 <- renderText(int3())
})
你看到我在哪里定义 int1、int2、int3 了吗?现在假设我在这之后有很多行代码使用 int1、int2 和 int3。每次我有使用 int1、int2 或 int3 的 R 编程语句时,我都必须使用反应函数。这在我当前的程序中意味着很多次。
有没有办法将所有这些代码放入某种类型的块中,自动将 REACTIVE 应用于块中的所有内容?所以每次它看到 int1()、int2() 或 int3() 时我不需要单独的 REACTIVE 函数?
【问题讨论】:
-
5000 行很重要 - 您确定要将其转换为照原样闪亮吗?我可能会建议将您的代码构建为一个包并利用您的算法。但是有一个闪亮的应用程序需要等待很长时间才能生成结果,这可能不是一种有趣的用户体验。
-
我不确定它是否有 5000 行。 :-) 但它是一种统计算法,可以模拟一组临床试验的各种设计元素。因此,研究设计、样本量限制、剂量组的替代数量以及许多其他输入有各种输入。然后,该算法根据用户输入的阈值来量化各种结果的概率。这就是基本的想法。但是有很多处理,然后返回给用户的输出。