R闪亮自定义函数

3

我正在尝试在自定义函数中调用响应式函数,但是我无法成功。有什么最好的方法可以做到这一点?以下是简化后的代码,因为参数过多不能全部传递。

  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中调用使用其他函数的自定义函数最好的方法是什么?

1个回答

3

这要看你是否希望你的函数也具有响应性。

如果需要响应性,可以使用以下代码:

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

如果您不希望它是响应式的,请使用
 myf <- function() {return(isolate(psd$y))}

你的响应式表达式中没有响应式值(如input$)。因此它不会被创建。为了更好地理解反应性,请阅读这篇非常棒的指南


此外,也许你可以避免硬编码,并将你想要调用的响应式函数作为参数添加到你的函数中,像这样:

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

然后:

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


正如我所提到的,我输入的代码非常简化。我无法将“psd”传递给我的函数,因为不仅仅是“psd”,还有很多其他值需要传递,而且传递所有这些值并不实际。我正在寻找一种在自定义函数中调用响应式函数的方法! - Sri
好的,在您提供的代码中,反应式函数并不具备响应性,这可能是问题所在。在您的实际代码中,您是否确保了响应性? - Kirill
编辑回答,现在可以了吗? - Kirill
有趣的是,如果我将该函数作为响应式表达式移入shinyServer函数中,则可以访问所有其他函数。更详细地说,我正在调用一个lapply函数,如下所示:lapply(c("a","b","c",myf),因此,如果要使“myf”成为响应式,如何在响应式函数内访问“a”,“b”,“c”? - Sri
我不明白为什么它们必须在同一个lapply中是反应性的。您想在高层次上实现什么? - Kirill
没关系,我把myf移动到shinyServer函数里面了,它运行得很好。我还有其他问题,但我会创建一个新的跟踪。 - Sri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接