[问题] 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