gpt4 book ai didi

r - 响应式(Reactive)值(value)和响应式(Reactive)表达有什么区别?

转载 作者:行者123 更新时间:2023-12-03 13:30:00 34 4
gpt4 key购买 nike

Shiny tutorial ,有一个例子:

fib <- function(n) ifelse(n<3, 1, fib(n-1)+fib(n-2))

shinyServer(function(input, output) {
currentFib <- reactive({ fib(as.numeric(input$n)) })

output$nthValue <- renderText({ currentFib() })
output$nthValueInv <- renderText({ 1 / currentFib() })
})

我不明白 reactive缓存值。它是否在内部执行类似 return(function() cachedValue) 的操作? ?
现在我想知道我是否可以做到这一点?
fib <- function(n) ifelse(n<3, 1, fib(n-1)+fib(n-2))

shinyServer(function(input, output) {
currentFib <- reactiveValues({ fib(as.numeric(input$n)) })

output$nthValue <- renderText({ currentFib })
output$nthValueInv <- renderText({ 1 / currentFib })
})

最佳答案

使用currentFib <- reactiveValues({ fib(as.numeric(input$n)) })在这种情况下将不起作用。
您将收到一条错误消息,指出您正在访问“响应式(Reactive)上下文”之外的响应式(Reactive)值。

但是,如果您将其包装在函数调用中,它将起作用:
currentFib <- function(){ fib(as.numeric(input$n)) }
这是有效的,因为现在函数调用位于响应式(Reactive)上下文中。

关键区别 是他们在 Shiny documentation 中所做的区别,在无功“源”和“导体”之间。在那个术语中,reactive({...})指挥 , 但是 reactiveValues只能是 来源 .

  • 以下是我对 reactiveValues 的看法- 作为扩展 input 的一种方式在 UI.R 中指定。有时,input 中的插槽还不够,我们需要基于这些输入槽的派生值。换句话说,它是一种扩展 input 列表的方法。用于 future react 计算的插槽。
  • Reactive()照你说的做——它在每次任何 react 性值发生变化时重新运行表达式后返回值。如果您查看 reactive 的源代码你可以看到:
    最后一行是返回的缓存值:Observable$new(fun, label)$getValue其中 'fun' 是在对 reactive. 的调用中发送的表达式
  • 关于r - 响应式(Reactive)值(value)和响应式(Reactive)表达有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18324397/

    34 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com