我是R / Shiny的新手,我正试图了解反应性。到目前为止,this article和this 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足够聪明,可以意识到我未使用的参数是无用的。这很好,但是如何知道呢?
谢谢!
答案 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指定一个值,但你永远不会说,“嘿,根据该变量做一些事情”,所以它只是坐在那里。
故事的道德,你不仅需要接受变量,还要在函数中使用它们才能产生效果。