与未使用的参数有光泽的反应

时间:2018-05-24 20:18:25

标签: r shiny

我是R / Shiny的新手,我正试图了解反应性。到目前为止,this articlethis video都是有用的资源,但我遇到了一些我不太了解的问题。

这是我运行的代码的简化版本。

library(shiny)

some_func <- function(some_input, unused_argument) {
  print("Running - you changed something")
  if (some_input) {1} else {-1}
}

ui <- fluidPage(
  checkboxInput("negative", "Clicking makes all values negative"),
  checkboxInput("negative_pt2", "I thought clicking would not change results
                                 other than writing to the console, 
                                 but it does not even do that."),
  plotOutput("graphs")
)

server <- function(input, output) {
  library(ggplot2)

  output$graphs <- renderPlot({
    dataset2 <- reactive({mtcars * some_func(input$negative, input$negative_pt2)})
    ggplot(dataset2(), aes(x = mpg, y = hp)) + geom_line()
  })
}

shinyApp(ui = ui, server = server)

检查第一个框是否有预期的结果。但是在查看第二个控制台时查看控制台表明Shiny足够聪明,可以意识到我未使用的参数是无用的。这很好,但是如何知道呢?

谢谢!

1 个答案:

答案 0 :(得分:1)

你没有在你的函数中调用第二个参数,因此它不会做任何事情

我可以编写一个函数,要求用户输入一百万个变量,但是如果我不将它们称为函数本身,则它们永远不会被使用

some_func <- function(some_input, unused_argument) {
  print("Running - you changed something")
  if (some_input) {1} else {-1}
  }

.....

some_func(input$negative, input$negative_pt2)

是的,变量被放置在未使用的参数点中的函数中,但是它从未被使用过,所以它只是坐在那里。

如果我们改变我们的功能来处理它收集的变量,那么我们就会有变化。

some_func <- function(some_input, unused_argument) {
  print("Running - you changed something")
  if (some_input) {1} else {**unused_argument**}

  }

Shiny正在为negative_pt2指定一个值,但你永远不会说,“嘿,根据该变量做一些事情”,所以它只是坐在那里。

故事的道德,你不仅需要接受变量,还要在函数中使用它们才能产生效果。