首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在发亮的输出块之间传递信息

在发亮的输出块之间传递信息
EN

Stack Overflow用户
提问于 2014-07-17 15:36:08
回答 1查看 512关注 0票数 1

我有一个功能强大的程序,但是非常慢和麻烦,因为我在每个输出块中反复调用计算密集型函数。

虽然这样做有效,但它需要几分钟才能运行,因为每次需要时,我都会强迫计算机重复计算相同的信息。

我如何进行单个函数调用,将结果数据拉到一个列表中,然后将其分发到需要其不同部分的各种闪亮输出块中?

这是服务器端的代码.(我认为ui方面还可以.)

代码语言:javascript
复制
library(shiny)
 shinyServer(
  function(input, output) {
  output$table7 <- renderTable({
  inFile <- input$file1   
  if (is.null(inFile))
  return(NULL)   
  WorkingSet <- read.csv(inFile$datapath, header=TRUE, sep=',', 
                      quote='"')  
  TempHolder <- CARTOptimizer(WorkingSet, input$seed, input$k, input$whichcluster)
  TempHolder$v2
})
  output$plot1 <- renderPlot({
  inFile <- input$file1
  if (is.null(inFile))
    return(NULL)
  WorkingSet <- read.csv(inFile$datapath, header=TRUE, sep=',', 
         quote='"')
  TempHolder <- CARTOptimizer(WorkingSet, input$seed, input$k, input$whichcluster)
  clustertree = rpart(badcluster ~ ., data=TempHolder$v3, method="class",
         control=rpart.control(cp=TempHolder$v1))
  prp(clustertree)
})
  output$table1 <- renderTable({
  inFile <- input$file1
  if (is.null(inFile))
  return(NULL)
  WorkingSet <- read.csv(inFile$datapath, header=TRUE, sep=',', 
             quote='"')
  SingleClusterHolder <- SingleCluster(WorkingSet, input$seed, input$k,
    input$whichcluster)
  SingleClusterHolder$v1
 })
})

闪亮输出的截图:

请注意,CARTOptimizer和SingleCluster是用户定义的函数,分别返回三个不同的值:

  • CART优化器$v1=CART分析的最佳cp值
  • Matrix优化器$v2=混淆矩阵
  • Data优化器$v3=为后续分析提供额外列的精化数据集
  • 单簇$v1=群集详细信息矩阵
  • Single群集$v2=精化工作数据集(去除的因素)
  • 单簇$v3=精化持有数据集(现有因素)

如您所见,其中一些是单个值,一些是矩阵,还有一些是数据帧。

关于如何提高这一效率的建议将受到极大欢迎。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-03-09 19:43:52

在我看来,您有三个需要更新的实体: table7、table1和plot1。我认为您在这里所能做的最好的就是从分配这些代码的函数中删除尽可能多的代码。例如,看起来您加载了相同的csv文件3次,每次输出一次。您应该有一个单独的代码块,用于读取文件,并从该文件中汇编所需的任何信息,而无需生成任何图形。要防止它导致其他函数执行,请在每个输出中使用一个return(NULL)条件,如果没有设置其他参数,则该条件禁止显示。如果同一函数的结果在多个输出中使用,则该函数必须是一个单独的反应性对象。然后,每当在UI中更改参数时,该函数只执行一次。其结果发生了变化,这一事实触发了相关的输出发生变化。

通常,如果您多次将相同的计算密集型代码放入您的server.R文件中,则您正在创建一个较慢的程序。找到一种让更新像多米诺骨牌一样发生的方法,以便响应输入变化而更新的每个变量都保存在自己的反应性对象中,并存储在变量中。然后,只在必要时在您的输出定义中使用这些变量。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24807874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档