【问题标题】:How to use data.table in a reactive expression in shiny?如何在闪亮的反应式表达式中使用 data.table?
【发布时间】:2019-08-31 11:39:15
【问题描述】:

使用以下代码可以选择data.dable 的列。

mtcars_dt <- data.table(mtcars)
selected_cols <- c("mpg")
mtcars_dt[ ,..selected_cols]

我想在闪亮的反应式表达式中做同样的事情。但是,它的行为很奇怪。这是一个可重现的示例

library(shiny)
library(data.table)
mtcars_dt <- data.table(mtcars)

ui <- basicPage(
  selectInput("var", "Select variable", names(mtcars)),
  textOutput("out1"),
  textOutput("out2")
)


server <- function(input, output) {

output$out1 <- renderText({
    mtcars[1:3 ,input$var]
  })

output$out2 <- renderText({
  mtcars_dt[1:3 , ..input$var]
})

}

shinyApp(ui, server)

当我运行这个应用程序时,第二个输出是一个字符串,其中包含我要选择的列的名称。

为什么会这样?我该如何解决?

【问题讨论】:

  • 我会试试mtcars_dt[1:3, input$var, with = FALSE]
  • @StéphaneLaurent 那也不行。

标签: r shiny data.table


【解决方案1】:

请检查以下选项:

library(shiny)
library(data.table)

mtcars_dt <- data.table(mtcars)

ui <- basicPage(
  selectInput("var", "Select variable", names(mtcars)),
  textOutput("out1"),
  textOutput("out2")
)


server <- function(input, output) {

  output$out1 <- renderText({
    mtcars[1:3, input$var]
  })

  output$out2 <- renderText({
    cols <- input$var
    unlist(mtcars_dt[1:3, ..cols])

    # 1. alternative
    # mtcars_dt[1:3][[input$var]]

    # 2. alternative
    # mtcars_dt[1:3, get(input$var)]

    # 3. alternative
    # unlist(mtcars_dt[1:3, .SD, .SDcols = input$var])

    # 4. alternative
    # unlist(mtcars_dt[1:3, input$var, with = FALSE])
  })

}

shinyApp(ui, server)

【讨论】:

  • 不,抱歉,我不知道为什么 ..input$var 一开始就不起作用。我想这将是闪亮的反应值的范围问题。 Here 描述了 .. 点前缀的一般行为 - 另请注意我的编辑 - 一旦将列名传递给另一个变量,它就可以正常工作。
  • 目前.. 前缀适用于符号(如cols)。 input$var 实际上是$(input, var) 调用,而不是符号。
猜你喜欢
  • 2016-04-21
  • 2022-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-11
相关资源
最近更新 更多