我尝试创建两个renderUI
过滤器,这两个过滤器的值相互依赖。我有两个过滤器:百分比和价值。
百分比应为:value/total_amount
,值应为total_amount*percentage
。我需要这个,因为有时用户想要填写它想要的数字,有时它想要总数的百分比。我总是想要展示两者。
例如,如果用户在百分比过滤器中填写.20,我想在值过滤器中显示20。如果用户在值过滤器中填写80,我想在百分比过滤器中显示.8。
所以我希望这两个可以合并。我尝试这个代码,但它显然不起作用。
server <- function(input, output) {
total_amount<-100
output$percentage<-renderUI({
myvalue<- input$value/total_amount
if(is.null(myvalue))myvalue<-.2
# myvalue<-.2
#browser()
numericInput('percentage','percentage',value = myvalue)
})
output$value<-renderUI({
myvalue<- input$percentage*total_amount
if(is.null(myvalue))myvalue<-100
# myvalue<-100
numericInput('value','value',value = myvalue)
})
}
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput('percentage'),
uiOutput('value')
)
# ,mainPanel(plotOutput("distPlot"))
)
)
shinyApp(ui = ui, server = server)
答案 0 :(得分:1)
只需添加百分比的默认值,并确保窗口小部件具有值。
library(shiny)
server <- function(input, output) {
total_amount <- 100
percentage <- 0.2
output$percentage <- renderUI({
if(is.null(input$value)) {
myvalue <- percentage
} else {
myvalue <- input$value/total_amount
}
numericInput('percentage', 'percentage', value = myvalue)
})
output$value <- renderUI({
if(is.null(input$percentage)) {
myvalue <- percentage*total_amount
} else {
myvalue <- input$percentage*total_amount
}
numericInput('value', 'value', value = myvalue)
})
}
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
uiOutput('percentage'),
uiOutput('value')
)
,mainPanel()
)
)
shinyApp(ui = ui, server = server)