[问题类型]:
程式咨询(我想用R 做某件事情,但是我不知道要怎么用R 写出来)
[软件熟悉度]:
入门(写过其他程式,只是对语法不熟悉)
[问题叙述]:
我写了一个网页,主要功能是使用者汇入他的data
网页会使用汇入的data做复杂的运算后显示出第一个结果
使用者检视过这个结果后再input一些值
网页再依第一个结果搭上这次的input的值做另一个复杂的运算
最后再显示出第二个结果及画图
因使用者看过第一个结果后会需要时间决定之后要input的值 可能是隔几天
又加上运算实在花很多时间
(我已经很努力修改程式减少运算时间,但还是很久....Orz)
所以希望能够在使用者下一次打开网页后能够恢复到他上次关掉的状态
有考虑过把所有的计算结果全部都汇出下次再汇入
但因为这样要汇出很多东西 又要再汇入很多东西(下面程式是简化过的)
所以不知道是否能有其他更好的选择
又若真的必须把所有结果一一汇出的话
汇入的部分会建议从哪个步骤汇入??
譬如下面程式第一个计算结果
把汇入写在calResult1内或是output$list1内比较好??
[程式范例]:
ui <- fluidPage(
# 使用者汇入资料
fileInput("userData", label="Your Data", multiple=T, accept=c(".csv")),
# 第一个结果
DT::dataTableOutput("list1"),
# 使用者输入值
numericInput("n", "N", value=1),
# 第二个结果
DT::dataTableOutput("list2"),
plotOutput("plotResult")
)
server <- shinyServer(function(input, output, session){
# 汇入使用者资料
getData <- reactive({
req(input$userData)
out <- read.csv(input$userData$datapath)
return(out)
})
# 第一个复杂的计算
calResult1 <- reactive({
d <- getData()
out <- complicatedFunction1(d)
return(out)
})
# 显示第一个结果
output$list1 <- DT:: renderDataTable(
datatable(calResult1())
)
# 第二个复杂的计算
calResult2 <- reactive({
d <- calResult1()
out <- complicatedFunction2(d, input$n)
return(out)
})
# 显示第二个结果
output$list2 <- DT:: renderDataTable(
datatable(calResult2())
)
output$plotResult <- renderPlot({
d <- calResult2()
plot(x=d$x, y=d$y)
})
})