3

我有一个 rHandsontable 表(rhandsontable 包),现在我正在寻找一种如何将数据从表传输到数据框的方法。
到目前为止,我还没有找到如何执行此操作的明确线索。
我将非常感谢简单明了的示例或有用的链接。

此外,我扫描了一个有用的链接。它揭示了如何在 rhandsontable 对象中操作数据。

但没有找到有关使用方法的解释。它看起来像一个黑盒测试。如果你能分享一些关于这个问题的知识(如果有的话),那就太好了。

4

3 回答 3

2

查看它使用的shinysky Handsontable,它具有hot.to.df允许您将数据表转换为dataframe. 下面是一个最小的例子,说明我的意思

rm(list = ls())
library(shiny)
library(shinysky)

server <- shinyServer(function(input, output, session) {

  # Initiate your table
  previous <- reactive({head(mtcars)})

  Trigger_orders <- reactive({
    if(is.null(input$hotable1)){return(previous())}
    else if(!identical(previous(),input$hotable1)){
      # hot.to.df function will convert your updated table into the dataframe
      as.data.frame(hot.to.df(input$hotable1))
    }
  })
  output$hotable1 <- renderHotable({Trigger_orders()}, readOnly = F)
  # You can see the changes you made
  output$tbl = DT::renderDataTable(Trigger_orders())
})

ui <- basicPage(mainPanel(column(6,hotable("hotable1")),column(6,DT::dataTableOutput('tbl'))))
shinyApp(ui, server)
于 2016-07-12T08:58:51.503 回答
1

好吧,我找到了将 rhandsontable 对象转换为 R 中的数据框的方法。

使用函数“hot_to_r”似乎很容易,但整体函数描述很差

因此,请在 CRAN 上的包说明 (pdf)之外查找一些示例和解释。就我而言,我使用了黑盒测试。

这是我的情况:

test_case <- hot_to_r(input$all_updates)

变量“test_case”是一个数据框。

于 2016-07-13T12:32:21.600 回答
0

我在这里创建了一个可重现的示例,用于我现有的闪亮应用程序:

library(shiny)
library(rhandsontable)

server <- shinyServer(function(input, output, session) {
  
  # 1. I assign mtcar df to my rhandsontable ("test_table")
  output$test_table <- renderRHandsontable({
    rhandsontable(mtcars)
  })
  
  # 2. I can make some changes to this rhandsontable and generate the resulting table as dataframe
  values <- reactiveValues(data = NULL)
  
  observe({
    values$data <- hot_to_r(input$test_table)
  })

  # 3. I assign this df to a variable call df1
  df1 <- reactive({
    values$data
  })
  
  # 4. Click on action button to see df
  observeEvent(input$print_df_btn, {
    print(df1())
  })
  
})

ui <- basicPage(
  mainPanel(
    rHandsontableOutput("test_table"),
    br(),
    actionButton("print_df_btn", "Print dataframe to console")
    )
  )

shinyApp(ui, server)
于 2021-10-26T05:59:29.277 回答