0

我正在尝试在 R 闪亮框架中制作一个基本程序,以便我可以显示交互式数据表。我需要执行但不能执行的基本功能是获取任何选定/单击的单元格的行和列索引。我已经在线进行了研究并完全按照教程进行操作,但是教程中显示的内容似乎不起作用。因为我认为获得点击更难,所以我已经解决了获取所选单元格的行和列索引。这是我目前拥有的 ui.R 和 server.R 文件:

library(shiny)
library(shinyTable)
library(DT)

server <- function(input, output, session) {
  lastTransToMat = data.table(cbind(c(.5,.5),c(.8,.2)))
  output$transtable = DT::renderDataTable(lastTransToMat,options = list(target = 'column+row'))

  output$response <-DT::renderDataTable({
    rows= as.numeric(input$transtable_rows_selected)
    cols = as.numeric(input$transtable_columns_selected)

    print(rows)
    print(cols)

    response = data.table(cbind(c(paste0("rows: ",rows),c(paste0("cols: " ,cols)))))
    print(response)
    return(response)

  })
}

shinyUI(fluidPage(
  titlePanel("transition table"),
    mainPanel(
      DT::dataTableOutput('transtable'),
      DT::dataTableOutput('response')
    )
))

当我对此运行App() 时,我只能获取行的索引,而不能获取列的索引。请参阅下面的输出:

numeric(0)
        V1
1: rows: 1
2:  cols:

闪亮的应用程序本身也有类似的 data.table 输出。

有谁知道为什么会这样?

如何获取选择的行和列索引?那么点击呢?

最好的,

保罗

编辑:

根据 user5029763 的建议,我将 server.R 函数替换为以下内容:

#ui.R
library(shiny)
library(shinyTable)
library(DT)

shinyUI(fluidPage(
  titlePanel("transition table"),
  mainPanel(
    DT::dataTableOutput('transtable'),
    DT::dataTableOutput('response'),
    htmlOutput('response2')
  )
))

#server.R
server <- function(input, output, session) {
  lastTransToMat = data.table(cbind(c(.5,.5),c(.8,.2)))
  output$transtable = DT::renderDataTable(lastTransToMat,server = F,options = list(target = 'cell'))

  output$response <-DT::renderDataTable({
    cell= as.numeric(input$transtable_cell_clicked)
    print(cell)
    response = data.table(cbind(c(paste0("cell: "),c(paste0(cell)))))
    print(response)
    return(response)

  })

  output$response2 <- renderUI({
    cells <- input$transtable_cell_clicked
    if(length(cells) == 0) return( div('No cell is selected') )
    cells <- data.frame(cells)[-3]
    response <- paste0(c('Row', 'Column'), ': ', cells, collapse = ' / ')
    div(response)
  })
}

任何点击前的输出:

前

单击/选择后的输出: 在此处输入图像描述

这与您在此运行App() 时获得的输出相同吗?

编辑:也仅供参考,我在另一台具有最新版本 R 的计算机上尝试了这个并得到了相同的输出,所以我认为这与我的版本/计算机无关。

4

1 回答 1

0

如果您想要获取单击的单元格的索引,您可以使用:

  output$transtable = DT::renderDataTable(
      lastTransToMat, 
      server = F,
      selection = list(target = 'cell')
  )

然后,input$transtable_cell_clicked将是一个包含行/列索引和单元格内值的列表。请记住,列索引从 0 开始。

编辑:一种打印方式

#server.R

output$response2 <- renderUI({
  cells <- input$transtable_cell_clicked
  if(length(cells) == 0) return( div('No cell is selected') )
  cells <- data.frame(cells)[-3]
  response <- paste0(c('Row', 'Column'), ': ', cells, collapse = ' / ')
  div(response)
})

#ui.R

htmlOutput('response2')
于 2015-11-12T17:29:08.663 回答