我想为列表中的每个数据框创建tabPanel个元素.对于do.callmap函数,这似乎是可能的,但它会产生一个错误.

"[[中出错:try 在INTERGEROneIndex中 Select 少于一个元素"

我找到了这个似乎相关的问题,我试着把我所有的列表论点都放在alist()中,但这也不起作用. Shiny: use do.call to run render-family functions

这里是一个最小的重述.

library(tidyverse)
library(shiny)

ui <- fluidPage(
  uiOutput("tabs")
)

server <- function(input, output) {
  dat <- lst(iris, mtcars)
  
  if (FALSE) {
    # this works, but would like to replicate with do.call and map
    output$tabs <- renderUI(
      tabsetPanel(
        tabPanel("iris", renderDataTable(dat$iris)),
        tabPanel("mtcars", renderDataTable(dat$mtcars)),
      )
    )

  } else {
    # doesn't work
    output$tabs <- renderUI(
      do.call(
        tabsetPanel,
        map2(names(dat), map(dat, renderDataTable), tabPanel)
      )
    )
  }
  
}

shinyApp(ui = ui, server = server)

推荐答案

问题似乎出在创建renderDataTable的内部map.似乎当它渲染数据时,它再也找不到数据了.这看起来像是因为renderDataTable将数据值存储为未求值的表达式,而不是存储数据本身.文档中说,它采用"返回数据帧或矩阵的表达式",而不是map()中传递的数据本身.一种可能的解决方法是

output$tabs <- renderUI(
  do.call(
    tabsetPanel,
    map(names(dat), function(x) tabPanel(x, renderDataTable(dat[[x]])))
  )
)

R相关问答推荐

Tidyverse/Djirr为从嵌套列表中提取的列名赋值的解决方案

管道末端运行功能

如何使用R Shiny中的条件面板仅隐藏和显示用户输入,同时仍允许运行基础计算?

向gggplot 2中的数据和轴标签添加大写和星号

如何在xyplot中 for each 面板打印R^2

如何在geom_col中反转条

R函数‘paste`正在颠倒其参数的顺序

如何从像glm这样的模型中提取系数表的相关性?

R中的哈密顿滤波

如何用书面利率绘制geom_bar图

使用范围和单个数字将数字与字符串进行比较

在R中,我如何使用滑动窗口计算位置,然后进行过滤?

如何将Which()函数用于管道%>;%

如何计算增加10米(0.01公里)的行?

按镜像列值自定义行顺序

如何将图例文本添加到图例符号中

从字符串01JAN2021创建日期

在一个multiplot中以非对称的方式在R中绘制多个图

如何计算多个变量的百分比与总和的百分比?

如何在GGPlot中控制多个图例和线型