我正在开发一个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应用程序并让它返回自定义字符串吗?
答案 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)
输出: