在下面的R Shiny代码中,我使用conditionalPanel()来显示/隐藏"子X/Y表"中的可选用户输入,以便将额外的变量包含到数学运算中.我只希望conditionalPanel()将额外的用户输入隐藏(和显示)到在sidebarPanel()中呈现的子X/Y表中,同时允许计算运行,就好像这些用户输入没有被隐藏一样,从而在mainPanel()中呈现调用mainTbl的输出表,无论是否判断checkboxInput().如何做到这一点?

These images explain. This first image is what appears when the App is first invoked: enter image description here

And this image shows what renders when the checkboxInput() is checked. I would like the below output table from the mainPanel() to render even when the checkboxInput() is not checked, when first invoking the App: enter image description here

代码 :

library(shiny)
library(rhandsontable)

extraFun <- function(input_df, time_win, col_name) {
  df <- setNames(data.frame(rep(NA, time_win)), col_name)
  df[,col_name] <- 
    ifelse(seq_along(df[,1])%in%input_df[,1],input_df[match(seq_along(df[,1]),input_df[,1]),2],0)
  return(df)
}

ui <- fluidPage(
  sidebarPanel(
    h5(strong("Variable (Y) over window (W):")),
    rHandsontableOutput("parentTbl"), 
    checkboxInput("showCurves", HTML("<b>Add curves</b>"), FALSE),  
    conditionalPanel(
      condition = "input.showCurves == true",
      uiOutput("childTbl")
    )
  ),
  mainPanel(tableOutput("mainTbl"))
)

server <- function(input, output, session) {
  parentVars  <- lapply(1:2, function(i) { reactiveValues(data = 2) })
  grpInputs   <- reactiveValues(tables = list())
  plus        <- reactive(extraFun(grpInputs$tbl[["A"]],10,"A"))
  minus       <- reactive(extraFun(grpInputs$tbl[["B"]],10,"B"))
  
  output$parentTbl <- renderRHandsontable({
    rhandsontable(
      data.frame(Inputs = sapply(parentVars, function(x) x$data)),
      rowHeaders = c("A","B")
    )
  })
  
  observeEvent(input$parentTbl, {
    newValues <- hot_to_r(input$parentTbl)$Inputs
    for (i in 1:2) {parentVars[[i]]$data <- newValues[i]}
  })
 
  # Below builds child X/Y tables #
  lapply(1:2, function(i) {
    varInputId <- c("A","B")[i]
    output[[varInputId]] <- renderRHandsontable({
      df <- data.frame(X = 1, Y = parentVars[[i]]$data)
      rhandsontable(df, contextMenu = TRUE, rowHeaders = FALSE) 
    })
  })
  
  output$childTbl <- renderUI({
    lapply(1:2, function(i) {
      varInputId <- c("A","B")[i]
      list(
        h5(strong(paste("Adjust ", varInputId, " (Y) at time X:"))),
        rHandsontableOutput(varInputId)
      )
    })
  })
  
  observe({
    lapply(1:2, function(i) {
      varInputId <- c("A","B")[i]
      if (!is.null(input[[varInputId]])) {
        grpInputs$tbl[[i]] <- hot_to_r(input[[varInputId]])
        names(grpInputs$tbl)[i] <- varInputId
      }
    })
  })
  
  amCrs <- reactive({
    balances <- cumprod(c(1, 1+plus()[1:10,1]-minus()[1:10,1]))
    b <- head(balances, -1)
    result <- data.frame(
      Begin=b,Add=b*plus()[1:10,1],Subtract=b*minus()[1:10,1],End=balances[-1]
    )
  })
  
  output$mainTbl <- renderTable({
    req(length(grpInputs$tbl) > 0)
    amCrs()
  })
  
}

shinyApp(ui, server)

推荐答案

在这里添加outputOptions(output, varInputId, suspendWhenHidden = FALSE):

  lapply(1:2, function(i) {
    varInputId <- c("A","B")[i]
    output[[varInputId]] <- renderRHandsontable({
      df <- data.frame(X = 1, Y = parentVars[[i]]$data)
      rhandsontable(df, contextMenu = TRUE, rowHeaders = FALSE) 
    })
    outputOptions(output, varInputId, suspendWhenHidden = FALSE)
  })

R相关问答推荐

如何使用geom_sf在边界显示两种 colored颜色 ?

如果列中存在相同的字符串,则对行值进行总和

selectInput不返回ALL,并将因子转换为shiny 的数字

在R中替换函数中的特定符号

如何将dygraph调用到R Markdown作为一个shiny 的react 对象的参数?

如何得到R中唯一的组合群?

R中插入符号训练函数的中心因子和尺度因子预测

在保留列表元素属性的同时替换列表元素

R -在先前group_by级别汇总时获取最大大小子组的计数

在R中创建连续的期间

减go R中列表的所有唯一元素对

'使用`purrr::pwalk`从嵌套的嵌套框架中的列表列保存ggplots时出现未使用的参数错误

在ggplot2上从多个数据框创建复杂的自定义图形

如何在使用因子时获得Sankey图的Scale_Fill_Viridis的全范围

ArrangeGrob()和类似的替代方法不接受Grob列表.在Grid.Draw,返回:glist中的错误(...):仅允许在glist";中使用Grobs;

如何将EC50值绘制在R中的剂量-react 曲线上?

通过匹配另一个表(查找表)中的列值来填充数据表,并在另一个变量上进行内插

打印的.txt文件,将值显示为&Quot;Num&Quot;而不是值

R中的交叉表

基于已有ID列创建唯一ID