我想通过在R shiny中使用observe()来创建一个向量。在代码打击中,如何创建一个所有输入$ n连接起来的vactor。目前,我只能显示单个值,但无法连接并显示来自sliderInput的所有输入。
library(shiny)
fluidPage(
titlePanel("Observer demo"),
fluidRow(
column(4, wellPanel(
sliderInput("n", "N:",
min = 10, max = 1000, value = 200, step = 10)
)),
column(8,
tableOutput("text")
)
)
)
library(shiny)
function(input, output, session) {
observed=reactiveValues(
input=NULL
)
observe({
observed$input=input$n
# observed$input=c(observed$input,input$n) # tried this but not working
})
output$text <- renderTable({
observed$input
})
}
答案 0 :(得分:3)
如果您在观察者中添加print(observed$input)
,则会在使用observed$input=c(observed$input,input$n)
时看到您遇到无限循环,因为observe
对observe$input
有反应意志修改后立即再次运行。
为防止这种情况发生,您可以使用isolate
:
observed$input=c(isolate(observed$input),input$n)
与@Pork Chop的答案一样,您也可以使用observeEvent
来观察input$n
。
答案 1 :(得分:3)
试试这个,您可以根据需要使用cbind
或rbind
rm(list = ls())
library(shiny)
ui <- fluidPage(
titlePanel("Observer demo"),
fluidRow(
column(4, wellPanel(
sliderInput("n", "N:",
min = 10, max = 1000, value = 200, step = 10)
)),
column(8,
tableOutput("text")
)
)
)
server <- function(input, output, session) {
observed=reactiveValues(
input=NULL
)
observeEvent(input$n,{
observed$input <- cbind(observed$input,input$n)
})
output$text <- renderTable({
print(observed$input)
observed$input
})
}
shinyApp(ui <- ui, server <- server)