这是一个简单的 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)
})
})