R 未找到有光泽的活动对象

R 未找到有光泽的活动对象,r,shiny,R,Shiny,我想我在我闪亮的应用程序中缺少了一些关于反应的东西。这是一个MRE,它显示了我在打印y时遇到的问题 library(shiny) ui <- fluidPage( titlePanel("Test"), textAreaInput("text", "Text", "", width = "400px"), verbatimTextOutput("text"), actionButton("do", "Run"), textOutput("result")

我想我在我闪亮的应用程序中缺少了一些关于反应的东西。这是一个MRE,它显示了我在打印
y
时遇到的问题

library(shiny)

ui <- fluidPage(
   titlePanel("Test"),
   textAreaInput("text", "Text", "", width = "400px"),
   verbatimTextOutput("text"),
   actionButton("do", "Run"),
   textOutput("result")
   )

server <- function(input, output) {
  observeEvent(input$do, {
  y <- reactive({
    x <- ""
    t <- 1
    while (t < 5) {
      x <- paste(input$text, x, sep=",")
      t <- t + 1
    }
  })
  })
  output$result <- renderPrint({y})
}

shinyApp(ui = ui, server = server)
库(闪亮)

ui您不应该在
observeEvent
observe
调用中放置反应值。事实上,Joe Cheng建议不要将
observe
reactive
函数嵌套在它们自己或其他函数中。它们是用于不同目的的独立事物。由于您希望根据单击
输入$do
的时间创建反应式
y
,因此应使用
eventReactive

server <- function(input, output) {
  y <- eventReactive(input$do, {
    x <- ""
    t <- 1
    while (t < 5) {
      x <- paste(input$text, x, sep=",")
      t <- t + 1
    }
    return(x)
  })

  output$result <- renderText({y()})
}

server您不应该在
observeEvent
observe
调用中放入反应值。事实上,Joe Cheng建议不要将
observe
reactive
函数嵌套在它们自己或其他函数中。它们是用于不同目的的独立事物。由于您希望根据单击
输入$do
的时间创建反应式
y
,因此应使用
eventReactive

server <- function(input, output) {
  y <- eventReactive(input$do, {
    x <- ""
    t <- 1
    while (t < 5) {
      x <- paste(input$text, x, sep=",")
      t <- t + 1
    }
    return(x)
  })

  output$result <- renderText({y()})
}

serverI问题是对
reactive()
的调用没有返回任何内容。将表达式包装在
reactive
中,每次更改表达式中的reactive值时,都会将表达式的返回值指定给变量。被动值通常都是
input$…
变量,以及存储在
reactiveValues()
对象中的变量

如果我没弄错,每次按下“运行”按钮时,您都要更改并打印
y
。将其保存到
reactiveValue()
集合(类似于列表),然后将其放入
renderPrint
函数中

根据您的代码,我估计您希望
y
成为while循环后
x
的值

library(shiny)

ui <- fluidPage(
  titlePanel("Test"),
  textAreaInput("text", "Text", "", width = "400px"),
  verbatimTextOutput("text"),
  actionButton("do", "Run"),
  textOutput("result")
)

server <- function(input, output) {
  values <- reactiveValues()
  observeEvent(input$do, {
    x <- ""
    t <- 1
    while (t < 5) {
      x <- paste(input$text, x, sep=",")
      t <- t + 1
    }
    values$y <- x
  })
  output$result <- renderPrint({values$y})
}

shinyApp(ui = ui, server = server)
库(闪亮)

uiI问题是对
reactive()
的调用没有返回任何内容。将表达式包装在
reactive
中,每次更改表达式中的reactive值时,都会将表达式的返回值指定给变量。被动值通常都是
input$…
变量,以及存储在
reactiveValues()
对象中的变量

如果我没弄错,每次按下“运行”按钮时,您都要更改并打印
y
。将其保存到
reactiveValue()
集合(类似于列表),然后将其放入
renderPrint
函数中

根据您的代码,我估计您希望
y
成为while循环后
x
的值

library(shiny)

ui <- fluidPage(
  titlePanel("Test"),
  textAreaInput("text", "Text", "", width = "400px"),
  verbatimTextOutput("text"),
  actionButton("do", "Run"),
  textOutput("result")
)

server <- function(input, output) {
  values <- reactiveValues()
  observeEvent(input$do, {
    x <- ""
    t <- 1
    while (t < 5) {
      x <- paste(input$text, x, sep=",")
      t <- t + 1
    }
    values$y <- x
  })
  output$result <- renderPrint({values$y})
}

shinyApp(ui = ui, server = server)
库(闪亮)

在这个基本示例中,如果您在输入框中键入“help”,我想运行并打印
x
,这将是
help,help,help,help,
,如果您键入“help”,我正在创建一个与我真正想要的内容断开连接的反应式
y
,这是这个基本示例中反复粘贴的
x
在输入框
text
中,我想运行并打印
x
,这将是
help,help,help,
我正在创建一个与我真正想要的内容断开的反应式
y
,它是迭代粘贴的
x
啊,ok@tbradley。这很有帮助。啊,好的@tbradley。这很有帮助。