Rshiny renderRHandsontable如何基于表的一列中的值更新表

时间:2019-05-03 20:26:25

标签: r shiny shiny-reactivity rhandsontable shinyapps

我什至不确定我是否可以实现所需的输出,但是我想问一问,因为我对这个问题非常执着。我正在构建一个有rHandsontableOutput对象的闪亮应用程序。当我更新表的第4列时,我希望它自动将表的5-16列乘以第4列中的新值。我很难将相乘的结果显示在表中。 rHandsontable对我来说有点棘手。我知道如何在表中显示数据,然后在另一个输出对象中使用它,但是我对如何在同一输出对象中使用它有些困惑。最好不必求助于文本输入来更新表或其他非表格式的解决方案。任何帮助或替代解决方案将不胜感激!

我引用了其他几篇尚未成功的文章。

show the sum of specific columns based on rhandsontable values

Update handsontable by editing table and/or eventReactive

Flexdashboard, rhandsontable: how to programmatically access user updated table?

我的代码如下:

#ui

... fluidRow(
              column(width=8,
                     box(
                       width = NULL, div(rHandsontableOutput('contents'), style = "font-size: 92%"),title = "Potential View",
                       status = "primary", solidHeader = TRUE)
                     # img(height = "500px", alt="SNAP Logo", src="overlay.png"))

              )


            )...

#server
indat <- reactiveValues(data=table_1)

observe({
  if(!is.null(input$contents))
    indat$data <- hot_to_r(input$contents)

})


output$contents <- renderRHandsontable({

  tbl <- rhandsontable(indat$data) %>% hot_col(col = c(1,2,3), readOnly = TRUE) 

  c=as.vector(tbl$col_4)
  tbl_new = tbl[,c(5:16)]
  test= data.frame(mapply(`*`,tbl_new,c))

  return(test)

})

我还尝试过按一下按钮来更新表,或者只创建一个可以编辑的向量并将其与新表绑定,但是我对这两种解决方案都没有运气。

1 个答案:

答案 0 :(得分:0)

如果您的问题是增加列数,则可以尝试以下操作:

library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

df <- tibble(
  a = 1:10,
  b = 11:20,
  c = 21:30,
  d = 31:40
)

df
#> # A tibble: 10 x 4
#>        a     b     c     d
#>    <int> <int> <int> <int>
#>  1     1    11    21    31
#>  2     2    12    22    32
#>  3     3    13    23    33
#>  4     4    14    24    34
#>  5     5    15    25    35
#>  6     6    16    26    36
#>  7     7    17    27    37
#>  8     8    18    28    38
#>  9     9    19    29    39
#> 10    10    20    30    40

df %>% 
  mutate_at(2:4, function(x) x * .$a)
#> # A tibble: 10 x 4
#>        a     b     c     d
#>    <int> <int> <int> <int>
#>  1     1    11    21    31
#>  2     2    24    44    64
#>  3     3    39    69    99
#>  4     4    56    96   136
#>  5     5    75   125   175
#>  6     6    96   156   216
#>  7     7   119   189   259
#>  8     8   144   224   304
#>  9     9   171   261   351
#> 10    10   200   300   400

reprex package(v0.2.1)于2019-05-05创建

您基本上可以使用函数dplyr::mutate_at来引用要相乘的列。然后,我们使用匿名function(x)将列a乘以之前指定的列。