我正在尝试在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并获得相同的输出,因此我不认为它与我的版本/计算机有关。
答案 0 :(得分:0)
如果你想要的是获得点击单元格的索引,你可以选择:
input$transtable_cell_clicked
然后,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)
})
将是一个包含行/列索引的列表以及单元格中的值。请记住,列索引从0开始。
编辑:打印出来的一种方式
#server.R
htmlOutput('response2')
#ui.R
if (windowAspectRatio > imageAspectRatio) {
yPos = (yPos / imageHeight) * 100;
xPos = (xPos / imageWidth) * 100;
} else {
yPos = ((yPos / (windowAspectRatio / imageAspectRatio)) / imageHeight) * 100;
xPos = ((xPos / (windowAspectRatio / imageAspectRatio)) / imageWidth) * 100;
}