2017-03-04 61 views
0

到UI我想发送的数字值从server.r到ui.r闪亮在R:发送数字值从服务器

例如当我加载一个数据库到服务器侧,我想发送length(colnames(datababase))添加到UI。

作为数字值发送很重要,因为我想在UI端对它进行一些计算。

我该怎么办?

我知道有一些解决方案,如textOutput与UI通信,但现在我想传递数值。

ps1:as.numeric(textOutput("text1'))不起作用。 :)

ps2:我也知道功能sendCustomMessageShiny.addCustomMessageHandler但我真的不明白我怎么用它来直接发送信息到用户界面。

+0

'sendCustomMessage'可用于向JS发送信息。对于依赖于服务器值的ui元素,通常会采用'renderUI()',但这是在服务器端完成的......所以你想在ui方面做什么? – BigDataScientist

+0

我想创建一个'plotOutput'对象作为'length(colnames(database)',我想用'selectInput'动态地改变这个值,当我用'renderUI()'完成这个工作时,它不会是动态的。 – Slownz

回答

1

无论如何,我会推荐一个解决方案renderUI() :)。

library(shiny) 

ui <- fluidPage(
    selectInput("nr", "number", 2:4), 
    uiOutput("plots") 
) 

server <- function(input, output, session) { 

    output$plots <- renderUI({ 
    plot_output_list <- lapply(1:input$nr, function(i) { 
     plotname <- paste0("plot", i) 
     plotOutput(plotname) 
    }) 
    tagList(plot_output_list) 
    }) 

    observe({ 
    for(iterNr in 1:input$nr){ 
     output[[paste0("plot", iterNr)]] <- renderPlot({ 
     plot(iterNr) 
     }) 
    } 
    }) 
} 

shinyApp(ui, server) 
+0

你是对的,我们的工作也很活跃,我记得很糟糕。 – Slownz

1

如果我理解正确你的问题,你需要看一看observeEvent和无功值,让你的情节重新呈现每一个输入发生变化时(或其他事件发生时)

基本上在你的server.R中有一个调用renderEvent在observeEvent里面,你实际上并不需要“发送”它到UI(再次,如果我明白你的意思,很难说没有例子肯定)