Обновите значение до входного значения $ без входной логики $ - PullRequest
0 голосов
/ 10 января 2019

Я хочу изменить значение input$value, которое генерирует мой shinyapp. Для этого

Я пробовал с:

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 голосов
/ 10 января 2019

Хотя @anotherfred прав, что этот вопрос обсуждался, он не получил полного ответа.

Рассмотрим это минимальное приложение:

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 имеет атрибут read-only. Конечно, атрибуты теоретически могут быть перезаписаны.

Смотрите обсуждение здесь: https://github.com/rstudio/shiny/issues/167#issuecomment-108412945

Это приведет к: attr(input, "readonly") <- FALSE. Я помню, я попробовал это некоторое время назад, и это сработало. Не уверен, что это все еще работает, но на самом деле это не так важно. Потому что это, безусловно, не лучшая практика, и в большинстве случаев найдется лучший способ достичь желаемого результата.

В вашем случае я бы вместо этого использовал значение реактивного и сделал бы данные в пределах renderTimevis() реактивными. Если вы добавите воспроизводимый пример, мы можем обсудить его подробно. Я вижу тот же вывод, что и Джонни Фелпс, упомянутый в комментарии (с загруженной библиотекой timevis, ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...