这是一个简单的 Shiny 应用程序:

ui.R

library(shiny) 
shinyUI(bootstrapPage( 
  numericInput("mymun", "enter a number",0), 
  textOutput("mytext")  
)) 

server.R

library(shiny) 
test <-  function(input, output){ 
  renderText(paste("this is my number:",input$mymun)) 
} 
 
shinyServer(function(input, output) {  
  output$mytext <- test(input, output) 
}) 

但是,如果我将函数调用的结果放入一个临时变量中,应用程序将失败

server.R

library(shiny) 
test <-  function(input, output){ 
  renderText(paste("this is my number:",input$mymun)) 
} 
 
shinyServer(function(input, output) {  
  tmp <- test(input, output) 
  output$mytext <- tmp 
}) 

错误信息是:

Error in substitute(value)[[2]] :  
 object of type 'symbol' is not subsettable 

有谁能提供线索说明为什么第二个失败而第一个没有失败? 我猜这是由于表达式处理和 Shiny 服务器的 react 逻辑,但我不清楚。

请您参考如下方法:

真正解决这个问题的最好方法是重新阅读 http://www.rstudio.com/shiny/lessons/Lesson-6/ + http://www.rstudio.com/shiny/lessons/Lesson-7/ + http://rstudio.github.io/shiny/tutorial/#scoping以确保您完全理解 react 性和范围(在 SO 中发布开创性教程文本毫无意义)。

为了接近您想要做的事情,您需要在 server.R 中执行以下操作:

library(shiny) 
 
shinyServer(function(input, output) {  
 
  test <- reactive({ 
    return(paste("this is my number:",input$mymun)) 
  }) 
 
  output$mytext <- renderText({ 
    tmp <- test() 
    return(tmp) 
  }) 
 
}) 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!