是否可以创建反应性的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
# 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
值为y
和100
。
200