インタラクティブなデータ テーブルを表示できるように、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)
})
}
クリック前の出力:
これは、これで runApp() を実行したときに得られる出力と同じですか?
編集:参考までに、Rの最新バージョンを使用して別のコンピューターでこれを試してみたところ、同じ出力が得られたので、私のバージョン/コンピューターとは関係ないと思います。