2017-06-28 102 views
0

我希望你很好。我試圖創建一個閃亮的儀表板,用戶可以從另一個更新一個rhandsontable。我的代碼如下:r shiny:更新rhandsontable從另一個rhandsontable

library(shiny) 
library(rhandsontable) 

channel <- c("TV","Radio","Digital") 
start.date <- as.Date("2017-01-01") 
end.date <- as.Date("2017-01-07") 
date.range <- as.POSIXct((seq(start.date,end.date,by="day")), origin = "1970-01-01") 
date.range <- as.data.frame(date.range) 
colnames(date.range) <- c("date") 
date.range[channel] <- 0 
table1 <- date.range 
table2 <- date.range 
#Define the tables. 

ui <- fluidPage(
    br(), 
    fluidRow(
    column(4, rHandsontableOutput("table1output")), 
    column(4, rHandsontableOutput("table2output")) 
)) 

server <- function(input,output,session){ 
    table <- reactiveValues() 
    table$table1 <- table1 
    table$table2 <- table2 
    #define reactive values as table1 and table2 

    output$table1output <- renderRHandsontable({rhandsontable(table$table1)}) 
    output$table2output <- renderRHandsontable({rhandsontable(table$table2)}) 
    #rhandsontable outputs 

    observeEvent(input$table1output,{ 
    df <- hot_to_r(input$table1output) 
    df <- as.data.frame(df) 
    table$table2 <- df 
    }) 
    #if a user updates table1 table2 should also update. 

    observeEvent(input$table2output,{ 
    df <- hot_to_r(input$table2output) 
    df <- as.data.frame(df) 
    table$table1 <- df 
    }) 
    #if a user updates table2 table1 should also update. 

} 

shinyApp(ui = ui, server = server) 

每當我運行代碼我得到以下錯誤:

Warning: Error in as: no method or default for coercing 「character」 to 「NA」 

我不能爲我的生命得到這個工作!任何幫助將非常感謝!

乾杯,

哈利

+0

看起來像日期是問題。如果我用其他替換桌子,一切工作正常。看看如何在'rhandsontable'中使用日期列。根據[源文件](https://jrowen.github.io/rhandsontable/),'Sys.Date()'中的'Date'是一個允許的格式。 –

回答

2

可使用的日期格式rhandsontable

的第一個問題是date列的格式。好像POSIXct不允許在這裏。根據the github documentation of rhandsontable,推薦使用Sys.Date()中的Date。因此,與

date.range <- as.Date((seq(start.date,end.date,by="day")), origin = "1970-01-01") 

更換

date.range <- as.POSIXct((seq(start.date,end.date,by="day")), origin = "1970-01-01") 

解決了這個問題。警告

警告:錯誤爲:不進行強迫被調用創建hot_to_r「字」爲「NA」

方法或默認現在應該走了。

更新這兩個表一次

爲了讓所有的變化table1影響table2,反之亦然,你可以使用相同的反應值的表存儲在服務器端。

這是一個完整的工作解決方案。

library(shiny) 
library(rhandsontable) 

channel <- c("TV","Radio","Digital") 
start.date <- as.Date("2017-01-01") 
end.date <- as.Date("2017-01-07") 
date.range <- as.Date((seq(start.date,end.date,by="day")), origin = "1970-01-01") 
date.range <- as.data.frame(date.range) 
colnames(date.range) <- c("date") 
date.range[channel] <- 0 
table1 <- date.range 
table2 <- date.range 
#Define the tables. 

ui <- fluidPage(
    br(), 
    fluidRow(
    column(4, rHandsontableOutput("table1output")), 
    column(4, rHandsontableOutput("table2output")) 
)) 

server <- function(input,output,session){ 
    table <- reactiveValues() 
    table$table1 <- table1 
    #DEFINE ONLY TABLE1 

    output$table1output <- renderRHandsontable({rhandsontable(table$table1)}) 
    output$table2output <- renderRHandsontable({rhandsontable(table$table1)}) 
    #rhandsontable outputs 

    observeEvent(input$table1output,{ 
    df <- hot_to_r(input$table1output) 
    df <- as.data.frame(df) 
    table$table1 <- df 
    }, ignoreInit = TRUE, ignoreNULL = TRUE 
) 
    #if a user updates table1 table2 should also update. 

    observeEvent(input$table2output,{ 
    df <- hot_to_r(input$table2output) 
    df <- as.data.frame(df) 
    table$table1 <- df 
    }, ignoreInit = TRUE, ignoreNULL = TRUE 
) 
    #if a user updates table2 table1 should also update. 

} 

shinyApp(ui = ui, server = server) 
+0

非常感謝Gregor!這工作完美!這樣一個簡單的錯誤!感謝只有一個反應值的例子! –

+0

不客氣。如果這解決了您的問題,請接受答案。 –