不是一个聪明的程序员。简单的问题。Flexdashboard应用程序中的rhandsontable。如何访问用户更新的列?示例代码:
---
title: "Test"
runtime: shiny
output:
flexdashboard::flex_dashboard:
orientation: columns
vertical_layout: fill
---
```{r setup, include=FALSE}
库(Flexdashboard)
库(闪亮)
需要(Dplyr)
需要(Tidyverse)
需要(Rhandsontable)
小时<- 1:24
必填<- c(2,2,2,2,2,8,8,8,8,4,4,3,3,3,3,6,6,5,5,5,5,3,3)
必需的<- as.integer(必需)
on_duty <- as.integer(rep(0,24))
开始<- on_duty
df <- data.frame(小时,必需,on_duty,开始)
Inputs {.sidebar data-width=w}
-----------------------------------------------------------------------
```{r Inputs}
Column {data-width=200}
-----------------------------------------------------------------------
### Chart A
```{r}
全局<- reactiveValues(df = df)
rHandsontableOutput("dftbl1")
output$dftbl1 = renderRHandsontable({
rhandsontable(global$df, selectCallback = TRUE, readOnly = FALSE)
})
因此,代码呈现该表。用户可以通过编辑表格单元格来更新表格。但是,如何引用更新后的表来将表列传递给使用actionButton调用的函数呢?我发现的复杂例子很难破解。感谢任何反馈。SteveM
发布于 2018-12-11 07:36:41
您可以使用hot_to_r
,如下所示
modified_table <- reactive({
hot_to_r(req(input$table_id)) ## req!
})
以访问表的当前状态,包括来自用户的修改。req
是必需的,因为hot_to_r
不能处理NULL
%s。table_id
应该是用于renderRHandsontable
返回值的输出id。
output$table_id <- renderRHandsontable({
rhandsontable(initial_table) ## need to call converter
})
您引用的复杂检查(如this one,#64-81)允许表的双向连接,因为它们可以从用户和服务器进行更新。然而,在我这里概述的这个简单的设置中,modified_table
是用reactive
创建的,所以它只能由用户更新。
我完全同意,通过在hot_to_r
中允许NULL
,并在返回值为data.frame
的情况下在renderRHandsontable
中自动调用rhandsontable
,可以使这个包变得更加用户友好,但这是您必须使用的。
以下是演示此设置的完整应用程序
library(shiny)
library(rhandsontable)
ui <- fluidPage(
rHandsontableOutput("table_id"),
tableOutput("second_table")
)
server <- function(input, output, session) {
initial_table <- head(iris)
output$table_id <- renderRHandsontable({
rhandsontable(initial_table) ## need to call converter
})
modified_table <- reactive({
hot_to_r(req(input$table_id)) ## req!
})
output$second_table <- renderTable({
modified_table()
})
}
shinyApp(ui, server)
为了访问特定的列,您可以在反应式上下文中使用modified_table()$column_name
。
https://stackoverflow.com/questions/53712551
复制相似问题