【发布时间】:2015-11-05 19:46:47
【问题描述】:
再一次,我觉得我错过了一些非常简单的东西。
我正在尝试将一个用户界面放入一个闪亮的应用程序中,该用户界面在表格的最左侧列中具有单选按钮。选择一个按钮将决定在后续分析中使用哪些数据。
到目前为止,我已经设法根据answers to this question 获得表中的单选按钮,但是当我选择不同的单选按钮时,我似乎无法获得与输入对应的反应值来更改。
非常感谢您对我所缺少的内容提供一些指导。
ui.R
library(shiny)
shinyUI(fluidPage(
titlePanel("Radio Matrix"),
sidebarLayout(
sidebarPanel( ),
mainPanel(
tabsetPanel(
tabPanel(title = "Selection",
br(),
uiOutput("table"),
verbatimTextOutput("gear"),
verbatimTextOutput("reactive_gear")
)
)
)
)
))
server.R
library(shiny)
shinyServer(function(input, output) {
values <- reactiveValues(gear = 3)
output$table <-
renderText({
f.changeSelectedRow()
"<!--html_preserve--><table style = 'border-collapse:collapse;'>
<tr>
<th colspan = '1'; rowspan = '1'; style=''></th>\n
<th colspan = '1'; rowspan = '1'; style=''>gear</th></tr>\n\n
<tr>
<td colspan = '1'; rowspan = '1'; style='text-align:center;background-color:#DCDCDC;'><input type='radio' name='gear' value='3 checked = 'checked> </td>\n
<td colspan = '1'; rowspan = '1'; style='text-align:center;background-color:#DCDCDC;'>3</td></tr>\n\n
<tr>
<td colspan = '1'; rowspan = '1'; style='text-align:center;background-color:#F5F5F5;'><input type='radio' name='gear' value='4 checked = '> </td>\n
<td colspan = '1'; rowspan = '1'; style='text-align:center;background-color:#F5F5F5;'>4</td></tr>\n\n
<tr>
<td colspan = '1'; rowspan = '1'; style='text-align:center;background-color:#DCDCDC;'><input type='radio' name='gear' value='5 checked = '> </td>\n
<td colspan = '1'; rowspan = '1'; style='text-align:center;background-color:#DCDCDC;'>5</td></tr>\n
</table><br/><br/>\n<!--/html_preserve-->"
})
f.changeSelectedRow = reactive({
if(is.null(values$gear)) values$gear <- 3
if(!is.null(input$gear)) ### from the radio button set.
if(input$gear != values$gear) values$gear <- input$gear
})
output$gear <- renderText(input$gear)
output$reactive_gear <- renderText(values$gear)
})
返回给output$table的表格是由一系列函数产生的,最终将HTML代码输出为字符串。我只提供了硬编码到renderText 中的 HTML 代码的简化版本,因为我怀疑 HTML 代码不是问题(尽管我可以错)。
我用来生成单选按钮代码的函数是:
radio_html <- function(inputId, label, choices, selected=NULL) {
if (is.null(selected)) selected <- choices[1]
paste0("<input type='radio' name='",
inputId, "' value='", choices,
" checked = '",
ifelse(choices == selected, "checked", ""),
"> ", label)
}
【问题讨论】: