Tôi có một ứng dụng để tạo dữ liệu trực quan hóa thời gian thực với thư viện R shiny
. Tôi thực hiện tải lại dữ liệu định kỳ từ tệp bằng chức năng reactivePoll
. Những gì tôi không thích về điều này là bất cứ khi nào dữ liệu tải lại toàn bộ ứng dụng làm mới.Cập nhật dữ liệu trong ứng dụng sáng bóng mà không cần làm mới toàn bộ ứng dụng
Vì vậy, ví dụ nếu tôi có DT
đầu ra bảng có lựa chọn và tôi sử dụng lựa chọn này input$table_rows_selected
nó sẽ đặt lại thành NULL
bất cứ khi nào tải lại dữ liệu không thân thiện với người dùng.
Tổng thể có thể thay đổi đầu ra dữ liệu mà không làm gián đoạn người dùng không?
CẬP NHẬT.
Điều này có thể đạt được với bất kỳ gói nào khác để hiển thị bảng - googleVis
hoặc khác không?
Ví dụ làm việc.
library(shiny)
library(DT)
runApp(shinyApp(
ui = fluidPage(dataTableOutput('table')),
server = function(input, output, session) {
pollData <- reactivePoll(4000, session,
checkFunc = function(){ Sys.time() },
valueFunc = function(){ data.frame(id = sample(letters[1:3]), a = runif(3), b = runif(3), c = runif(3)) })
output$table <- renderDataTable({pollData()})
proxy <- dataTableProxy('table')
observeEvent(pollData(), {
selectRows(proxy, input$table_rows_selected)
})}
))
Tôi đã lấy ví dụ này từ câu trả lời @NicE và cột id được thêm vào. Vấn đề là câu trả lời @NicE là OK nếu cần một hàng nhất định khi hàng đó được xác định bằng số hàng.
Giả sử tôi cần một hàng để được chọn khi hàng đó được xác định bởi một số giá trị id. Đó là nếu tôi chọn một hàng có id bằng b, thì lần tải lại dữ liệu tiếp theo tôi muốn hàng được chọn có cùng giá trị id.
Điều này rất phổ biến với gói 'DT'. Bạn sẽ cần phải xây dựng một số tùy chỉnh 'JS' để chăm sóc điều đó. Ngoài ra, bạn có thể sử dụng xtable như 'nhấp nháy' là không đáng chú ý. có một cái nhìn ở đây http://stackoverflow.com/questions/26976860/how-to-change-datatable-row-background-colour-based-on-the-condition-in-a-column –
Tải lại dữ liệu chỉ cần thêm dòng mới hoặc cập nhật các giá trị hiện có? Bạn có thể sử dụng 'dataTableProxy' để thay đổi bảng mà không cần hiển thị lại nó. Nếu bạn chỉ muốn 'table_rows_selected' lưu lại trên bảng mới của mình, bạn cũng có thể đặt chúng theo lập trình sau khi cập nhật dữ liệu. – NicE
Nó có thể là một bảng mới với vài hàng thay đổi nhưng hầu hết thời gian nó sẽ được cập nhật giá trị. @ NicE bạn có thể giải thích ý của bạn bằng cách "đặt chúng theo chương trình" một phần không? –