在反应式语句中使用扫描
Using scan in reactive statement
我正在尝试使用 Shiny 在 R 中编写一个简单的程序。该程序读取用户选择的文本文件,然后将其显示为 .html 对象。我正在使用 'scan' 函数读取文本文件(注意,目前只尝试输出第一行)。程序运行,但输出没有更新。为什么不更新输出?谢谢
library(shiny)
shinyApp(
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("text_file", "Choose text file",
multiple = FALSE,
accept = c(".txt")
)
),
mainPanel(htmlOutput("example"))
)
),
server <- function(input, output, session){
text <- reactive({
req(input$text_file)
x <- scan(input$text_file, what = "string", sep = "\n")[1]
})
# text output
output$example <- reactive({
renderUI({
HTML(x)
})
})
}
)
shinyApp(ui, server)
您需要进行一些更改:
- 文件读取一个文件,你必须要求从
input$inputId$datapath
而不是input$inputId
读取文件。
- 您的
renderUI()
应该 return text()
而不是 x
,因为 text()
是您正在渲染的反应对象。
- 您不需要将
reactive()
添加到 shiny 中的任何 render
函数,因为它们已经是反应式的。
将您的服务器更改为以下内容:
server <- function(input, output, session){
text <- reactive({
req(input$text_file)
x <- scan(input$text_file$datapath, what = "string", sep = "\n")[1]
})
# text output
output$example <- renderUI({
HTML(text())
})
}
我正在尝试使用 Shiny 在 R 中编写一个简单的程序。该程序读取用户选择的文本文件,然后将其显示为 .html 对象。我正在使用 'scan' 函数读取文本文件(注意,目前只尝试输出第一行)。程序运行,但输出没有更新。为什么不更新输出?谢谢
library(shiny)
shinyApp(
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
fileInput("text_file", "Choose text file",
multiple = FALSE,
accept = c(".txt")
)
),
mainPanel(htmlOutput("example"))
)
),
server <- function(input, output, session){
text <- reactive({
req(input$text_file)
x <- scan(input$text_file, what = "string", sep = "\n")[1]
})
# text output
output$example <- reactive({
renderUI({
HTML(x)
})
})
}
)
shinyApp(ui, server)
您需要进行一些更改:
- 文件读取一个文件,你必须要求从
input$inputId$datapath
而不是input$inputId
读取文件。 - 您的
renderUI()
应该 returntext()
而不是x
,因为text()
是您正在渲染的反应对象。 - 您不需要将
reactive()
添加到 shiny 中的任何render
函数,因为它们已经是反应式的。
将您的服务器更改为以下内容:
server <- function(input, output, session){
text <- reactive({
req(input$text_file)
x <- scan(input$text_file$datapath, what = "string", sep = "\n")[1]
})
# text output
output$example <- renderUI({
HTML(text())
})
}