[問題類型]:
程式諮詢(我想用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)
})
})