首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在flexdashboard中使用rhandsontable

在flexdashboard中使用rhandsontable
EN

Stack Overflow用户
提问于 2017-02-28 06:06:56
回答 1查看 903关注 0票数 1

我正在尝试使用rhandsontable来记录用户输入,并将其传递到Shiny服务器端以进行进一步处理。具体地说,对于下面的代码,我想添加一列来记录用户输入,并在flexdashboard valueBox中显示列的总和。但不知何故,reativeValue看起来并不是反应性的。无论我如何更改第一列的Vol_Percent,valueBox都不会更改。有什么建议吗?谢谢!

代码语言:javascript
复制
---
title: "Test"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    vertical_layout: scroll
runtime: shiny
---

```{r global, include=FALSE}

packages <- c("flexdashboard","readr","dplyr","rhandsontable","shiny")

for (包中的p){

库(p,character.only = TRUE,静默= TRUE)

}

代码语言:javascript
复制
Column {.sidebar}
-----------------------------------------------------------------------
### Input and Control
```{r input_panel}

输入文件

fileInput(inputId = "file_property_input",label =“上传属性”)

代码语言:javascript
复制
Row 
-----------------------------------------------------------------------
### Properties
```{r property_table}

加载输入数据文件

值<- reactiveValues()

df_input <-反应性({

验证(need(input$file_property_input,message = FALSE))

input_file <- input$file_property_input

return(read_csv(input_file$datapath))

})

数据<-反应性({

if(is.null(values["data"])) {

代码语言:javascript
复制
data <- cbind(Vol_Percent = rep(0, nrow(df_input())), data.frame(df_input())) 

}否则{

代码语言:javascript
复制
data <- values[["data"]]

}

values[" data "] <- data

返回(数据)

})

renderRHandsontable({

rhandsontable(data(),%>% = TRUE,readOnly = TRUE,height = 400) rhandsontable

代码语言:javascript
复制
hot_col("Vol_Percent", readOnly = FALSE) %>%
代码语言:javascript
复制
hot_cols(fixedColumnsLeft = 1) %>%
代码语言:javascript
复制
hot_context_menu(allowRowEdit = FALSE, allowColEdit = FALSE, 
代码语言:javascript
复制
customOpts = list(
代码语言:javascript
复制
  search = list(name = "Search",
代码语言:javascript
复制
                callback = htmlwidgets::JS(
代码语言:javascript
复制
                  "function (key, options) {
代码语言:javascript
复制
                     var srch = prompt('Search criteria');
代码语言:javascript
复制
                     this.search.query(srch);
代码语言:javascript
复制
                     this.render();
代码语言:javascript
复制
                   }"))))

})

代码语言:javascript
复制
Row 
-----------------------------------------------------------------------
### Input Validility
```{r input_valid}

renderValueBox({

信息<-“输入已验证”

valueBox(value = info,icon = ifelse(info ==“输入验证”,"fa-check","fa-times"),color = ifelse(info ==“输入验证”,“成功”,“危险”))

})

代码语言:javascript
复制
### Total Percentage
```{r information}

renderValueBox({

速率<- sum(values["data"]$Vol_Percent)

valueBox(value = rate,icon = ifelse(rate == 100,“fa- ==”,"fa-times"),valueBox= ifelse(rate == 100,"success","warning"))

})

代码语言:javascript
复制
EN

回答 1

Stack Overflow用户

发布于 2017-02-28 23:06:51

我是根据这里发布的示例https://github.com/jrowen/rhandsontable/blob/master/inst/examples/rhandsontable_portfolio/server.R弄明白的。

以下是更新后的代码

代码语言:javascript
复制
---
title: "Test"
output: 
  flexdashboard::flex_dashboard:
    orientation: rows
    vertical_layout: scroll
runtime: shiny
---

```{r global, include=FALSE}

packages <- c("flexdashboard","readr","dplyr","rhandsontable","shiny")

for (包中的p){

库(p,character.only = TRUE,静默= TRUE)

}

代码语言:javascript
复制
Column {.sidebar}
-----------------------------------------------------------------------
### Input and Control
```{r input_panel}

输入文件

fileInput(inputId = "file_property_input",label =“上传属性”)

代码语言:javascript
复制
Row 
-----------------------------------------------------------------------
### Properties
```{r property_table}

加载输入数据文件

值<- reactiveValues(hot = NULL)

sum_percentage <-反应性({

$Vol_Percent(sum(values[“hot”]return))

})

df_input <-反应性({

验证(need(input$file_property_input,message = FALSE))

input_file <- input$file_property_input

return(read_csv(input_file$datapath))

})

输出$hot <- renderRHandsontable({

数据<- NULL

if (is.null(values["hot"])) {

代码语言:javascript
复制
values[["hot"]] <- cbind(Vol_Percent = rep(0, nrow(df_input())), data.frame(df_input()))

}

如果(!is.null(输入$hot)){

代码语言:javascript
复制
data <- hot_to_r(input$hot)
代码语言:javascript
复制
values[["hot"]] <- data

} else if (!is.null(values["hot"])) {

代码语言:javascript
复制
data <- values[["hot"]]

}

如果(!is.null(data)) {

代码语言:javascript
复制
rhandsontable(data, search = TRUE, readOnly = TRUE, height = 400) %>%
代码语言:javascript
复制
hot_col("Vol_Percent", readOnly = FALSE) %>%
代码语言:javascript
复制
hot_cols(fixedColumnsLeft = 1) %>%
代码语言:javascript
复制
hot_context_menu(allowRowEdit = FALSE, allowColEdit = FALSE, 
代码语言:javascript
复制
customOpts = list(
代码语言:javascript
复制
  search = list(name = "Search",
代码语言:javascript
复制
                callback = htmlwidgets::JS(
代码语言:javascript
复制
                  "function (key, options) {
代码语言:javascript
复制
                     var srch = prompt('Search criteria');
代码语言:javascript
复制
                     this.search.query(srch);
代码语言:javascript
复制
                     this.render();
代码语言:javascript
复制
                   }"))))

}

})

rHandsontableOutput(“热”)

代码语言:javascript
复制
Row 
-----------------------------------------------------------------------
### Input Validility
```{r input_valid}

renderValueBox({

信息<-“输入已验证”

valueBox(value = info,icon = ifelse(info ==“输入验证”,"fa-check","fa-times"),color = ifelse(info ==“输入验证”,“成功”,“危险”))

})

代码语言:javascript
复制
### Total Percentage
```{r information}

renderValueBox({

rate <- ifelse(!is.null(sum_percentage()),sum_percentage(),0)

valueBox(value = rate,icon = ifelse(rate == 100,“fa- ==”,"fa-times"),valueBox= ifelse(rate == 100,"success","warning"))

})

代码语言:javascript
复制
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42496649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档