2017-08-01 34 views
0

我有一個代碼(類似於另一篇文章)Insert a numeric input for each row - R Shiny,它可以用數據框中的現有值生成可編輯的renderTable。現在我想在編輯值後將更新後的值保存到同一個數據幀中。我怎麼做?可編輯的renderTable和保存值 - R Shiny

shiny::runApp(list(
ui = basicPage(
tableOutput("My_table") 
), 
server = function(input, output, session) { 

My_table = matrix( 
    c(1:100), 
    nrow=20, 
    ncol=5) 

output$My_table <- renderTable({ 
    input1 <- paste0("<input id='a", 1:nrow(My_table), "'"," value='",My_table[,1],"'" ," class='shiny-bound-input' type='character' style='width: 50px;'>") 
    input2 <- paste0("<input id='b", 1:nrow(My_table), "'"," value='",My_table[,5],"'" ," class='shiny-bound-input' type='number' style='width: 50px;'>") 
    cbind(input1, My_table[,c(2,3,4)], input2) 
}, sanitize.text.function = function(x) x) 

} 
)) 

任何幫助,將不勝感激。謝謝。

+0

您可能感興趣的是:http://stla.github.io/stlapblog/posts/shiny_editTable.html –

回答

0

我可以幫你找到一半。您需要使用靜態值解析表的動態輸入並創建一個新表 - 然後將新表(或陣列)傳遞給Shiny。此外,可能比單擊表格獲得響應更好。

無論如何,這裏有雲:

shiny::runApp(list(
    ui = basicPage(
    # a div named mydiv 

    tableOutput("myTable"), 
    # javascript code to send data to shiny server 
    tags$script(' 
    document.getElementById("myTable").onclick = function() { 
       var value = $("table tr").value(); 
       Shiny.onInputChange("mydata", value); 
       }; 
       '), 
    tableOutput("results") 
), 
    server = function(input, output, session) { 

    My_table = matrix( 
     c(1:100), 
     nrow=20, 
     ncol=5) 

    output$myTable <- renderTable({ 
     input1 <- paste0("<input id='a", 1:nrow(My_table), "'"," value='",My_table[,1],"'" ," class='shiny-bound-input' type='character' style='width: 50px;'>") 
     input2 <- paste0("<input id='b", 1:nrow(My_table), "'"," value='",My_table[,5],"'" ," class='shiny-bound-input' type='number' style='width: 50px;'>") 
     cbind(input1, My_table[,c(2,3,4)], input2) 
    }, sanitize.text.function = function(x) x) 

    output$results = renderTable({ 
     input$mydata }) 
    } 

))