是否可以将Shiny应用中的verbatimTextOutput
元素的文本内容读作变量?
以下sample app的想法是,当用户点击button1
时,text2
的内容会更新并显示text1
中的内容(" Hello world"在这种情况下)。
下面的observeEvent
处理程序会生成此错误:Warning: Error in $.shinyoutput: Reading objects from shinyoutput object not allowed.
但是这对我来说是最接近我设法找到解决方案的。
任何帮助都将不胜感激。
谢谢,
雨果
library(shiny)
shinyApp(
ui = basicPage(verbatimTextOutput("text1"),
actionButton("button1", "Read & copy text!"),
verbatimTextOutput("text2")),
server = function(input, output, session) {
output$text1 <- renderText("Hello world")
output$text2 <- renderText("Waiting for new text...")
observeEvent(input$button1, {
output$text2 <- output$text1
})
}
)
答案 0 :(得分:0)
您可以将text1
对象的输出存储到变量并传递该变量。我建议你使用session$userData
对象,因为它是你闪亮会话的一部分,你不必全局声明变量。以下是代码
library(shiny)
shinyApp(
ui = basicPage(verbatimTextOutput("text1"),
actionButton("button1", "Read & copy text!"),
verbatimTextOutput("text2")),
server = function(input, output, session) {
output$text1 <- renderText({
session$userData$text1 <- "Hello world"
session$userData$text1})
output$text2 <- renderText("Waiting for new text...")
observeEvent(input$button1, {
output$text2 <- renderText(session$userData$text1)
})
}
)
答案 1 :(得分:0)
library(shiny)
shinyApp(
ui = basicPage(textInput("text1","","",placeholder = "Hello World"),
actionButton("button1", "Read & copy text!"),
verbatimTextOutput("text2")),
server = function(input, output, session) {
text2 <- eventReactive(input$button1,{
input$text1
})
output$text2 <- renderText({
validate(
need(input$button1,"Waiting for new text....")
)
text2()
}
)
}
)
但是如果你想要的方式与你完全一样。所以,就是这样。
library(shiny)
shinyApp(
ui = basicPage(verbatimTextOutput("text1"),
actionButton("button1", "Read & copy text!"),
verbatimTextOutput("text2")),
server = function(input, output, session) {
output$text1 <- renderText("Hello world")
output$text2 <- renderText({
validate(
need(input$button1,"Waiting for new text...")
)
"Hello world"
})
}
)
答案 2 :(得分:0)
如果要读取任何带有id的标签上的文本,请将其保存在输入中。您可以使用pakage shinyjs和一些js代码来阅读文本,然后使用Shiny.onInputChange ()
创建输入。下面的代码解决了您的问题
library(shiny)
library(shinyjs)
shinyApp(
ui = basicPage(useShinyjs(),verbatimTextOutput("text1"),
actionButton("button1", "Read & copy text!"),
verbatimTextOutput("text2")),
server = function(input, output, session) {
output$text1 <- renderText("Hello world")
output$text2 <- renderText("Waiting for new text...")
observeEvent(input$button1, {
runjs("var textin1=$('#text1').text();
Shiny.onInputChange('textin1', textin1);
")
output$text2 <- renderText({input$textin1})
})
}
)