使用带有testOutput()的renderText()时出现R Shiny错误

时间:2016-09-16 20:55:05

标签: r shiny reactive-programming

我正在开发一个R Shiny中的应用程序,用户可以在其中输入或选择用于填充报告的文本,然后可以将其另存为文档。该文本应如下所示:

  

%Title%   创建者:%创建2016-09-16#

我的ui.R代码:

library(shiny)
library(hash)
shinyUI(mainPanel(
    textInput("report_author", label="Author")))

server.R代码:

library(shiny)
source("generate_report.R", local=TRUE)  
shinyServer(function(input, output) {
output$final_report <- reactive({
    input_report_author <- input$report_author
    input_report_year = ' ' 
    input_report_month = ' ' 
    input_report_panel = ' '  
    renderText({
      make_report(
        author=input_report_author,
        year=input_report_year,
        month=input_report_month,
        panel=input_report_panel)})})})

和generate_report.R:

make_report <- function(panel, author, year, month, date=defaultDate) {
  author = toString(author)
  report_text = paste(
    "% Title\n",
    "% Created by ", author, "\n",
    "% Created ", date, "\n\n",       
    "#", panel, "\n\n",
     sep="")
  return(report_text)}

返回的文字不是我的目标:

  

结构(function(...),{,if(length(outputArgs)!= 0&amp;&amp;   !hasExecuted $ get()){,警告(“未使用的参数:outputArgs   参数outputArgs只是“,,”意味着在嵌入时使用   “,”,“Markdown”代码块中的闪亮代码片段(使用   运行时:闪亮)。当运行“,,,”完整的Shiny应用程序时,请设置   输出参数直接在“,”中输出相应的输出函数   您的UI代码。“),hasExecuted $ set(TRUE),},if   (is.null(formals(origRenderFunc))),origRenderFunc(),else   origRenderFunc(...),},class =“function”,outputFunc = function   (outputId,container = if(inline)span else div ,, inline = FALSE)   ,{,container(id = outputId,class =“shiny-text-output”),},   outputArgs = list(),hasExecuted =)

如果我替换&lt; - input$report_author' with a string,,我会得到相同的错误,因此错误可能出现在代码的utput$final_report<-reactive({..})部分。

如果我尝试在没有reactive({})包装器的情况下运行应用程序,我会在input_report_author=input$report_author代码段遇到错误:

  

.getReactiveEnvironment()中的错误$ currentContext():操作不是   允许没有活跃的反应背景。

代码:

input_report_author = input$report_author
input_report_year = ' ' 
input_report_month = ' ' 
input_report_panel = ' ' 
output$final_report <- renderText({
    make_report(author=input_report_author, year=input_report_year,
        month=input_report_month, panel=input_report_panel)})

有人可以建议我如何将文本传递给Shiny应用程序并让它返回自定义字符串吗?

1 个答案:

答案 0 :(得分:0)

正如@Geovany所说,你不应该在renderText内包裹reactive。以下单文件应用程序适用于我:

library(shiny)

make_report <- function(panel, author, year, month, date=Sys.Date()) {
  author = toString(author)
  report_text = paste(
    "% Title\n",
    "% Created by ", author, "\n",
    "% Created ", date, "\n\n",       
    "#", panel, "\n\n",
     sep="")
  return(report_text)}

ui <- fluidPage(mainPanel(
  textInput("report_author", label="Author"),
  textOutput("final_report")
  )
)

server <- function(input, output) {

  output$final_report <- renderText({
    input_report_author <- input$report_author
    input_report_year = ' ' 
    input_report_month = ' ' 
    input_report_panel = ' '        
    make_report(
      author=input_report_author,
      year=input_report_year,
      month=input_report_month,
      panel=input_report_panel)}
    )
}

shinyApp(ui = ui, server = server)

输出:

enter image description here