反应性的tibble列

时间:2018-01-17 15:12:22

标签: r reactive-programming tibble

是否可以创建反应性的tibble列,因为列y的值主动链接到列x?因此,只要x发生更改,y就会根据定义的变异逻辑进行相应更改。想想“MS Excel电子表格”。

我想它最终归结为能够在列中放置函数(包含将进入dplyr::mutate语句的内容)并且每当使用/访问tibble或实际列时“自动调用它们” /印刷/等。

AFAIU tibble::tibble()不支持此功能(请参阅下面的闪亮示例:在mutate语句末尾使用y而不是y()时,您会收到错误“Column { {1}}是不受支持的类型函数“)。

有人可能会想出一个使用y功能的设计(在列表中包装函数并使用purrr和/或purrr:map2,请参阅example),但我如果可能,我正在寻找一个“更简单”的解决方案。

这是我到目前为止所尝试的:

purrr:invoke_map

基础R:makeActiveBinding

# Packages -----
library(tibble)
library(dplyr)
#> 
#> Attache Paket: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union
library(shiny)

更新列tb <- tibble(x = c(1, 2)) tb_2 <- tb %>% mutate(y = { makeActiveBinding("y", local(function() x * 10), environment()) y }) tb_2 #> # A tibble: 2 x 2 #> x y #> <dbl> <dbl> #> 1 1 10 #> 2 2 20 tb_2$x <- c(10, 20) tb_2 #> # A tibble: 2 x 2 #> x y #> <dbl> <dbl> #> 1 10 10 #> 2 20 20 后,我希望列x值为y100

Shiny:makeReactiveBinding

200

0 个答案:

没有答案