背景:我使用以下代码创建一个简单的表:
output$mytable = DT::renderDataTable({
datatable(data_frame_object, selection='single')
})
请注意,selection='single'
使得一次只显示一行选定的行。
我使用以下代码跟踪用户选择的行:
index=input$mytable_rows_selected
问题:我遇到的问题是,每次选择新行时,我都要重置index=input$mytable_rows_selected
的值。
目前,如果用户选择第1行,则索引将具有值[1]。如果用户然后选择第2行,则索引的值为[1,2]。但是,我只想让索引的值为[2]。
尝试解决方案:我的解决方法是使用index [length(index)]来获取上次选择的行,但这不适合我的目的。
使用虹膜数据的工作示例:
library(shiny)
library(DT)
server <- function(input, output, session) {
output$mytable = DT::renderDataTable({
datatable(iris[,c(1,4,5)],selection='single')
},
options = list(lengthMenu = c(5, 30, 50), pageLength = 10, orderClasses=TRUE)
)
output$info = DT::renderDataTable({
index=input$mytable_rows_selected
if (length(index)){
index2=index[length(index)]
}
else{
index2=index
}
iris[index2,c(1,4)]
},
options = list(pageLength = 5, orderClasses=TRUE, searching=FALSE)
)
}
ui <- fluidPage(
fluidRow(
column(4,dataTableOutput('mytable')),
column(6,offset=1,
tabsetPanel(type="tabs",
tabPanel("hi",dataTableOutput('info')))
)
)
)
答案 0 :(得分:0)
试试此代码
library(shiny)
library(DT)
server <- function(input, output, session) {
output$mytable = DT::renderDataTable({
datatable(iris[,c(1,4,5)],selection='single')
},
options = list(lengthMenu = c(5, 30, 50), pageLength = 10, orderClasses=TRUE)
)
selected.rows <- reactiveValues(index = NULL)
observe({
selected.rows$index <- input$mytable_rows_selected
})
output$info = DT::renderDataTable({
index=selected.rows$index
if (length(index)){
index2=index[length(index)]
}
else{
index2=index
}
iris[index2,c(1,4)]
},
options = list(pageLength = 5, orderClasses=TRUE, searching=FALSE)
)
}
ui <- fluidPage(
fluidRow(
column(4,dataTableOutput('mytable')),
column(6,offset=1,
tabsetPanel(type="tabs",
tabPanel("hi",dataTableOutput('info')))
)
)
)