R_Language 板


LINE

嗨,不好意思,一忙就忘記回應這篇文章了 我依照程式碼修改成可自動上傳一半的結果上去dropbox雲端的版本 我當初撰寫程式碼時也參考過以下兩個網址,給大家參考 https://daattali.com/shiny/persistent-data-storage/ https://shiny.rstudio.com/articles/persistent-data-storage.html 希望可以幫助到也擁有這個問題的版友們 ---以下程式碼 library(shiny) library(shinyjs) library(DT) library(rdrop2) #example data #write.csv(data.frame(x=c(1:5)+rnorm(5),y=c(5:1)+rnorm(5)),"thedata.csv",row.names = F,fileEncoding = 'UTF-8') ui <- fluidPage( useShinyjs(), # 載入讀取按鈕 actionButton("btn", "Continue?"), # 使用者匯入資料 fileInput("userData", label="Your Data", multiple=T, accept=c(".csv")), # 第一個結果 DT::dataTableOutput("list1"), # 使用者輸入值 numericInput("n", "wait n seconds", value=1), actionButton("btn2", "confirm?"), # 第二個結果 DT::dataTableOutput("list2"), plotOutput("plotResult") ) server <- shinyServer(function(input, output, session){ drop_auth(new_user = FALSE, key = "xxxxxxxxxxx", secret = "xxxxxxxxxxx", cache = TRUE) # 匯入使用者資料 getData <- reactive({ req(input$userData) out <- read.csv(input$userData$datapath) return(out) }) # 第一個複雜的計算 calResult1 <- reactive({ #抓取檔案位置 file_name=drop_dir('yourapphere/data') if(dim(file_name)[1]<1){ #因為之前沒資料,所以不顯示繼續按鈕 hide("btn") d <- getData() #假裝運算(第1次複雜運算) Sys.sleep(10) #上傳第一次處理結果 write.csv(d,"thedata.csv",row.names = F,fileEncoding = 'UTF-8') drop_upload("thedata.csv",path = "yourapphere/data") #重新讀取一次dropbox,抓取確切位置 file_name_path <<-drop_dir('yourapphere/data')$path_display }else{ #因為之前有資料,所以不顯示上傳按鈕 hide("userData") #按按鈕才讀取 req(input$btn) #讀取dropbox檔案 file_name_path <<-file_name$path_display d <- drop_read_csv(file_name_path,fileEncoding = 'UTF-8',stringsAsFactors = F) } out <- d return(out) }) # 顯示第一個結果 output$list1 <- DT:: renderDataTable( datatable(calResult1()) ) # 第二個複雜的計算 calResult2 <- reactive({ d <-calResult1() #假裝運算(第2次複雜運算) req(input$btn2) Sys.sleep(isolate(input$n)) out <- d[order(d$x),] #記得,當結果出爐,記得刪除第一次處理的結果 drop_delete(file_name_path) #關掉繼續及選擇時間按鈕 hide("n");hide("btn2") return(out) }) # 顯示第二個結果 output$list2 <- DT:: renderDataTable({ datatable(calResult2()) }) output$plotResult <- renderPlot({ d <- calResult2() plot(x=d$x, y=d$y) }) }) shinyApp(ui,server) --- ps:記得去套用成自己的dropbox api、檔案位置也記得換 ※ 引述《puppy77 ( )》之銘言: : [問題類型]: : 程式諮詢(我想用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) : }) : }) --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.40.155.25
※ 文章網址: https://webptt.com/m.aspx?n=bbs/R_Language/M.1521991458.A.5D6.html
1F:推 celestialgod: 感謝分享 03/25 23:27
2F:推 puppy77: 希望這能解決我的問題 感謝j大分享!!!! 03/27 23:31
3F:推 cywhale: 推一個~~ 04/08 23:03







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:Tech_Job站內搜尋

TOP