r - 将值更新为没有 input$ 逻辑的 input$value
问题描述
我想更改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)
解决方案
虽然@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
。我记得我前段时间试过这个,它奏效了。不确定它是否仍然有效,但实际上并不那么重要。因为,这肯定不是最佳实践,而且大多数时候会有更好的方法来实现所需的输出。
在您的情况下,我将使用 reactiveValue 并在renderTimevis()
反应性中制作数据。如果您添加一个可重现的示例,我们可以详细讨论它。我看到了与评论中提到的 Jonny Phelps 相同的输出(加载了 timevis 库,...)
推荐阅读
- node.js - 如何根据参考/模型填充字段?
- delphi - 如何列出用户在 Delphi 中创建的 Pastebin 粘贴?
- javascript - 对象方法中的 Javascript 函数:什么时候应该(也不应该)在函数中包含 return?下面的示例代码
- protractor - 量角器 - 黄瓜不从示例中挑选值
- python - 在列表理解中使用 break
- amazon-web-services - 用于 CodeDeployProvisioningDeploymentId 标记的 Terraform ignore_changes
- oracle - 有效地使用索引与组进行自联接
- html - 反应式表单(无法读取 null 的属性错误)
- xslt - XPath 表达式中的调用函数
- java - 获取 VK_ 键的字符