【发布时间】:2014-07-17 15:36:08
【问题描述】:
我有一个 Shiny 程序可以运行,但是非常缓慢和麻烦,因为我在每个输出块中重复调用计算密集型函数。
虽然这可行,但它需要几分钟才能运行,因为我强制计算机在每次需要时重复计算相同的信息。
如何进行单个函数调用,将结果数据拉入单个列表,然后将其分发到需要不同部分的各种 Shiny 输出块?
这是可以工作的服务器端代码...(我认为ui端还可以...)
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 是用户定义的函数,它们各自返回三个不同的值:
- CARTOptimizer$v1 = 用于 CART 分析的最佳 cp 值
- CARTOptimizer$v2 = 混淆矩阵
- CARTOptimizer$v3 = 带有用于后续分析的附加列的优化数据集
- SingleCluster$v1 = 集群详细信息矩阵
- SingleCluster$v2 = 优化的工作数据集(去除因素)
- SingleCluster$v3 = 完善的持有数据集(存在因素)
如您所见,其中一些是单个值,一些是矩阵,还有一些是数据框。
非常欢迎您提出如何提高效率的建议。
谢谢。
【问题讨论】:
标签: r shiny reactive-programming