r - 如何在 Shiny 的响应式(Reactive)表达式中使用 data.table?

标签 r shiny data.table

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

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

我想在 Shiny 的响应式(Reactive)表达式中做同样的事情。然而,它的行为很奇怪。这是一个可重现的例子
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)

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

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

最佳答案

请检查以下选项:

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)

关于r - 如何在 Shiny 的响应式(Reactive)表达式中使用 data.table?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57737697/

相关文章:

R:覆盖栅格图层的xy坐标

r - 尝试创建森林图时出现 R 代码错误

带有进度条的 R Shiny 异步

r - data.table 的用户指定属性被删除

r - 将向量输出转换为 data.table 中的列?

r - 计算中位数时如何将 na.rm=TRUE 传递给 sapply?

替换 na.locf.xts(与多列 xts 一起使用时速度极慢)

shiny - DT::datatable 的背景颜色 Shiny

javascript - 在 Cloud Foundry 上运行 Shiny 应用程序的 R 构建包和 Assets 的 JavaScript 构建包

R:data.table .动态聚合列日期列