2016-09-16 67 views
1

我正在R Shiny中開發一個應用程序,用戶可以在其中輸入或選擇文本,然後用它來填充報告,然後將報告保存爲文檔。文本應該是這樣的:創建者R在testOutput()中使用renderText()時出現閃爍錯誤

%標題% %創2016年9月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)} 

返回的文字是不是我的目標爲:!

結構(函數(...){如果(長度(outputArgs)= 0 & & hasExecuted $ get()){,warning(「未使用的參數:outputArgs。 自變量outputArgs僅當將「Shiny」代碼片段嵌入「」,「R Markdown代碼塊(使用 runtime:shiny)時纔會使用」,「。當運行一個「,」完整的Shiny應用程序時,請將 輸出參數直接設置爲「」,「UI代碼的相應輸出函數 」。),hasExecuted $ set(TRUE),},如果 (是。 null(formals(origRenderFunc))),origRenderFunc(),else origRenderFunc(...),},class =「function」,outputFunc = function (outputId,container = if(inline)span else div,inline = FALSE) ,{,容器(ID = outputId的class = 「閃亮的文本輸出」),}, outputArgs =名單(),hasExecuted =)

如果我更換< - input$report_author' with a string,,我得到的同樣的錯誤,所以故障很可能在o 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)}) 

誰能告訴我如何在文字傳遞給一個閃亮的應用程序,並將它返回一個字符串定製?

+0

你應該把''裏面那renderText'是反應式輸入$ report_author'。在這種情況下,您不需要將其放入「反應」功能中。 – Geovany

回答

0

正如@Geovany指出的那樣,您不應該在reactive內包裝renderText。下面的單文件的應用程序爲我工作:

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