R闪亮:“ $。shinyoutput中的错误:不允许从闪亮输出对象读取。”

我正在制作一个闪亮的应用程序,在该应用程序中,用户可以根据制作的标签数量生成显示不同数据框的标签。例如,在下面的代码中:

library(shiny)
library(shinythemes)
library(DT)

ui <- navbarPage(theme = shinytheme("flatly"),title = "",id = "tabs",position = "static-top",tabPanel(title = "Plus",icon = icon("plus"))
)


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

  count <- reactiveValues(value = 0)

  observeEvent(input$tabs,{
    if (input$tabs == "Plus"){
      count$value <- count$value + 1
      id = paste0("Base ",count$value)
      insertTab(inputId = "tabs",tabPanel(title = id,fluidRow(
                           column(width = 12,dataTableOutput(outputId = paste0("data",count$value))
                           )
                         )),target = "Plus",position = "before",select = TRUE)}
  })


    output$data1 <- renderDataTable({
      mtcars[1,1:2]
    })


    output$data2 <- renderDataTable({
      mtcars[2,1:2]
    })


    output$data3 <- renderDataTable({
      mtcars[3,1:2]
    })

}

shinyApp(ui = ui,server = server)

您会看到用户可以添加一个选项卡,并且选项卡1将生成数据框的第一行,选项卡2将生成数据框的第二行,等等。

但是,此方法有一个局限性:我必须为用户可能显示的所有行编写代码。为了减少代码的长度,同时又不将用户限制为一定的行数,我想实现这一点的自动化。

我想创建一个在每个选项卡中显示右行的函数。因此,我创建了一个函数,该函数根据给定的参数创建了一个不同的数据框,并将此函数包含在observeEvent中,以便单击“加号”将创建一个新的选项卡,并用正确的数据框填充它。

下面是新代码(ui部分是相同的):

server <- function(input,session) {

  treat <- function(i){
    output$paste0("data",i) <- renderDataTable({
      mtcars[i,1:2]
    })
  }

  count <- reactiveValues(value = 1)

  observeEvent(input$tabs,select = TRUE)

      treat(count$value)
      }
  })

问题是我收到此错误:

  

在搜索解决方案时,我发现需要使用assign函数。所以我将功能更改为:

  treat <- function(i){
    assign(output$paste0("data",i),renderDataTable({
      mtcars[i,1:2]
    })
    )
  }

但是由于我现在在函数中使用了闪亮的输出,所以出现了错误:

  

$。shinyoutput中的错误:不允许从Shinyoutput对象读取。

我如何绕过此错误以获得我想要的东西?

xiaoliye 回答:R闪亮:“ $。shinyoutput中的错误:不允许从闪亮输出对象读取。”

找到了解决方案:我只需要将output$paste0("data",i)替换为output[[paste0("data",i)]]

希望这对某人有帮助

本文链接:https://www.f2er.com/3167638.html

大家都在问