在没有输入逻辑的情况下将值更新为输入值

时间:2019-01-10 09:41:28

标签: r shiny

我想更改我的Shinyapp生成的input$value的值。为此

我尝试过:

observeEvent(input$click,
             input$vis$start[1]<- "2019-01-09T03:00:00.000Z"
            )

但是我的答复是:

Warning: Error in $<-.reactivevalues: Attempted to assign value to a read-only reactivevalues object
  [No stack trace available]

所有代码:

library(timevis)
library(shiny)


data <- data.frame(
  start=c("2019-01-10","2019-01-11"),
  end =  c("2019-01-11","2019-01-12")
  )

ui <- fluidPage(
  br(),
  br(),
  timevisOutput("vis"),
  tableOutput("table"),
  actionButton("click","da")
)

server <- function(input,output){
  output$uno <- renderTimevis(

    timevis(data,options=list(editable=TRUE,stack=FALSE))
  )


  observeEvent(input$click,

               input$vis_data$start[1]<- "2019-01-09T03:00:00.000Z"

               )
  output$table <- renderTable(
    input$vis_data

  )

}

shinyApp(ui,server)

1 个答案:

答案 0 :(得分:1)

虽然@anotherfred对这个问题的讨论是正确的,但在此并没有得到完全的回答。

考虑这个最小的应用程序:

char (*a)[4];

控制台:

library(shiny)

ui <- fluidPage()

server <- function(input, output, session) {
  print(input)
}

shinyApp(ui, server)

您将在控制台中看到... ... $readonly [1] TRUE $ns function (x) x <bytecode: 0x000000000c417de0> <environment: namespace:base> 具有input属性。当然,从理论上讲,属性可以被覆盖。

请参阅此处的讨论: https://github.com/rstudio/shiny/issues/167#issuecomment-108412945

这将导致:read-only。我记得我在一段时间前尝试过,并且有效。不确定它是否仍然有效,但实际上并不那么重要。因为,这当然不是最佳实践,并且在大多数情况下,会有更好的方法来实现所需的输出。

在您的情况下,我将改用reactactiveValue,并使attr(input, "readonly") <- FALSE中的数据具有反应性。如果添加可复制的示例,我们可以对其进行详细讨论。我看到了与评论中提到的Jonny Phelps相同的输出(已加载timevis库,...)