【问题标题】:R shiny custom functionR闪亮的自定义功能
【发布时间】:2015-09-08 15:59:12
【问题描述】:

我试图在我的自定义函数中调用反应函数,但我不能。最好的方法是什么,这是简化的代码,我不能将所有内容都作为函数参数传递,因为要传递的太多了。

  library(shiny); 
  myf<-function(){ return(psd()$y) }
  shinyApp( ui = textOutput("test2"), 
      server = function(input, output) {
          psd<-reactive({ return(data.frame(x=10,y=30)) })
          output$test2 <- renderText({ myf() })
        }
      )

此代码生成错误:Error in myf() : could not find function "psd" 调用自定义函数的最佳方式是什么,该函数利用了 shinyserver 中的其他函数?

【问题讨论】:

    标签: r shiny


    【解决方案1】:

    这取决于您是否希望您的函数也具有反应性。

    在反应性使用的情况下:

    myf <- reactive({return(psd()$y})
    

    如果你不希望它是被动使用

     myf <- function() {return(isolate(psd$y))}
    

    您的反应式表达式没有反应式值(如 input$)。因此它不会被创建。要更好地理解反应性,请阅读this awesome instruction


    此外,您可能会尝试避免硬编码并尝试将要调用的反应函数作为参数添加到函数中,如下所示:

    myf<-function(func){ return(func()$y) }

    然后:

    output$test2 <- renderText({ myf(psd) })

    【讨论】:

    • 正如我所提到的,我输入的代码非常简化。我不能将psd 传递给我的函数,因为不仅仅是psd,我还需要传递许多其他值,而传递所有这些值是不切实际的。我正在寻找一种在我的自定义函数中调用反应函数的方法!
    • 好吧,在您提供的代码中,反应函数不是反应函数,这可能是问题所在。在您的真实代码中,您是否确保了反应性?
    • 已编辑答案,现在有帮助吗?
    • 有趣,如果我将函数作为反应表达式移入 shinyServer 函数,那么它可以访问所有其他函数。为了提供更多详细信息,我正在调用这样的 lapply 函数:lapply(c("a","b","c",myf) 所以,如果要使 myf 反应,我如何在反应函数中访问“a”、“b”、“c”?
    • 我不明白为什么他们必须在同一个lapply 中反应。你想在高层次上实现什么?
    猜你喜欢
    • 2014-09-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-14
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-11
    • 2019-03-20
    相关资源
    最近更新 更多