[問題] Shiny reactive value表單(已解決但不懂)

作者: skylikewater (choc.)   2015-03-20 13:16:22
[問題類型]:
程式諮詢(我想用R 做某件事情,但是我不知道要怎麼用R 寫出來)
[軟體熟悉度]:
使用者(已經有用R 做過不少作品)
[問題敘述]:
我在自己的 Shiny server 上寫一個能讀 MySQL 資料的網頁
現在想在其中一個 tab 加入操作資料庫的功能。
例如說,我可以選擇 table 中的某一列,
然後下面各個變數就會用預設值的形式叫出那筆資料,
我可以直接更改、然後送出修訂。
目前我的 UI 是:
output$KeyIn = renderUI({
fluidPage(
numericInput("RowChoice", "選擇第幾筆資料", value = 1,
min = 1, max = dim(Data)[1], step = 1),
h2("以下是編輯區")
fluidRow(
column(width = 3,
textInput("Var", "變數",
value = Data$Var[input$RowChoice]))
),
fluidRow(
column(width = 12, offset = 6,
submitButton("送出修訂"))
)
)
})
Data$Var[isolate(input$RowChoice)]
isolate(Data$Var[input$RowChoice]) 都不合法
我試過另外寫一個 reactive:
VarReac = reactive({as.numeric(input$RowChoice)})
或是用一個 function:
VarFunc = function(input) { return(input$RowChoice) }
然後用 VarFunc() 呼叫都不行。
我希望這個網站可以盡可能地用 R 來完成,
所以想徵詢大家,可以怎麼在 R 實現這件事
傍晚補充 =>
我寫出一個合法的版本了但我看不太懂:
textInput("Var", "變數",
value = reactive(function() {
if (is.null(input$RowChoice)) {
return("NULL")
} else {
return(isolate({
Data$Var[input$RowChoice])
}))
}
})())
我不太懂為什麼 reactive 一定要內含一個 function、再去 no input "()"
而且為什麼一定要考慮 is.null 的狀況?
我直接把 isolate({Data$Var[input$RowChoice]}) 寫在 value = 之後卻又不行?
[程式範例]:
如上
[環境敘述]:
R version 3.1.2 (2014-10-31)
Platform: x86_64-redhat-linux-gnu (64-bit)
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] RMySQL_0.10.2 DBI_0.3.1 shiny_0.11.1
[關鍵字]:
Shiny, form, reactive value
作者: skylikewater (choc.)   2015-03-22 19:56:00
reactive(function() { 需要簡化為 reactive({不然會有 "Passing functions to 'reactive' isdeprecated" 的警告而一個 renderUI 中至少要有一個if (is.null(input$XXX)) 判斷式,不然不會動但也不會報錯 真的很詭異的 bug

Links booklink

Contact Us: admin [ a t ] ucptt.com