RHandsontable - renderUI 映射

RHandsontable - renderUI Mapping

我想显示一个 HoT table 闪亮的每个切片因子,来自具有动态切片的数据集。下面是我实现此目的的最佳尝试,但输出是重复的 table。您可以从打印输出中的拆分数据框中看到一切看起来都是正确的,但 RHandsontable 似乎有一个问题,它只指向地图中创建的最后一个 HoT。

知道如何实现显示不同的数据帧吗?

library(shiny)
library(dplyr)
library(rhandsontable)
library(purrr)
ui <- fluidPage(

  uiOutput('tables')
)

server <- function(input, output) {
  mtcars$slc <- sample(c('aaa','bbb'),nrow(mtcars),replace=TRUE)
  df <- mtcars
  
  getSlice <- function(df_tmp,slca){
    print(slca)
    df_tmp <- df_tmp %>% filter(slc==slca)
    df_tmp
  }
  
  output$tables <- renderUI({
    slices <- unique(df$slc)
    input_dfs <- map(slices,~getSlice(df,.x))
    
    for(i in 1:length(slices)){
      print(input_dfs[[i]]) # proof that there are two distinct data 
                            #  frames going into renderRHandsontable()
      output[[slices[i]]] <- renderRHandsontable(rhandsontable(input_dfs[[i]]))
    }
    
    out <- map(slices,function(x){
      rHandsontableOutput(x)
    })
    print(out) # div ids are correctly distinct, but the tables that show are not!
    out
  })
}

shinyApp(ui = ui, server = server)

输出 - 所有 'aaa' 重复...

在你的 for 循环中使用 local()

for(i in 1:length(slices)){
  local({
    i <- i
    print(input_dfs[[i]]) # proof that there are two distinct data 
    #  frames going into renderRHandsontable()
    output[[slices[i]]] <- renderRHandsontable(rhandsontable(input_dfs[[i]]))
  })
}