我正在尝试在 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 的计算机上尝试了这个并得到了相同的输出,所以我认为这与我的版本/计算机无关。