【问题标题】:Calling an R code from Shiny based on UI element基于 UI 元素从 Shiny 调用 R 代码
【发布时间】:2021-05-06 10:29:21
【问题描述】:

我正在尝试根据用户输入日期调用(源)代码(以决定路径),但无法执行此操作。没有错误,但是调用的(源代码)代码不起作用(我知道这一点,因为没有输出文件)。我认为我无法正确使用 eventReactive 来执行以下代码-

ui = fluidPage(
    sidebarLayout(
    sidebarPanel(
    titlePanel("MY Outputs")
    ,dateInput("ME_DATE_output",label=h2("Execution Date"), value="2020-05-29")
    ,textOutput('dateSelectionStatement')
    ,hr()
    ,actionButton("calculate", "Calculate Again" )
    ,textOutput("success")
)))

server = function(input, output) { 
ME_DATE_GUI <- reactive({input$ME_DATE_output})
output$dateSelectionStatement <- renderText({paste0('You have selected: ', ME_DATE_GUI()) })

Code_loc <- "K:/Codes/"
code_execution <- eventReactive(input$calculate, {source(paste0(Code_loc,"GUI_trials.r"))}) 

# Print a message for refresh
output$success <- renderText({paste0('Output refreshed for date - ', ME_DATE_GUI())})


}

shinyApp(ui, server)

GUI_trials 看起来像 -

# Use GUI Reactive to get the date
ME_DATE <- as.Date(ME_DATE_GUI(), format="%Y-%m-%d")

year_N_ME_DATE <- format(ME_DATE,"%Y")
month_N_ME_DATE <- format(ME_DATE,"%m")
month_T_ME_DATE <- months(ME_DATE)

# Location for Outputs
Output_DIR <- "K:/Outputs/"
Output_loc <- paste(Output_DIR,month_N_ME_DATE,". ",month_T_ME_DATE, " ",year_N_ME_DATE,"/",sep="")

success <- "Success"
write.csv(success, paste0(Output_loc,"Success.csv"))

这两个问题是 -

  1. ME_DATE_GUI 在源代码 (GUI_trials.r) 中未标识。即使我在服务器部分使用ME_DATE &lt;&lt;- renderText({input$ME_DATE_output}) 并将ME_DATE &lt;- as.Date(ME_DATE, format="%Y-%m-%d") 放在GUI_trials.r 中,它也不起作用。错误是Error in as.Date.default: do not know how to convert 'ME_DATE' to class “Date”
  2. eventReactive 似乎没有做任何事情,即 actionButton 部分对我来说是不活动的。 非常感谢任何帮助!

【问题讨论】:

  • 您没有提供 MWE,因为我们无权访问您的 K 盘。
  • 抱歉,我认为 K: drive 并不重要,因为我提供了从那里调用的代码 GUI_trials.r,我可以向您保证文件夹和路径存在!
  • 如果您提供一个小而可重现的示例,这样我们就可以运行您的代码并遇到您面临的相同问题。
  • 我认为输出可以复制到任何名为 Date 的子文件夹,我有“//Outputs/05. May 2020/”,这取决于 ME_DATE,这是放置 CSV 输出的代码的目标在这样的文件夹中。可以从任何位置选择代码(GUI_trials 放置在 //Codes/ 中)。主要问题是从 Shiny 获取日期输入并在 R 代码中使用它。

标签: r shiny


【解决方案1】:

服务器功能作为 -

server = function(input, output) { 
ME_DATE_GUI <- reactive({input$ME_DATE_output})
output$dateSelectionStatement <- renderText({paste0('You have selected: ', ME_DATE_GUI()) })
Code_loc <- "K:/Codes/"

observeEvent(input$calculate, {
ME_DATE <- ME_DATE_GUI()
source(paste0(Code_loc,"GUI_trials2.r"), local = TRUE)
# Print a message for refresh
output$success <- renderText({paste0('Output refreshed for date - ', ME_DATE_GUI())})
}) 
}

随后将 GUI_trials2.R 代码更改为 -

# Use ME_DATE from Shiny
ME_DATE <- as.Date(ME_DATE, format="%Y-%m-%d")

解决了这个问题! 关键是在source 语句中使用local=TRUE

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-26
    • 2020-11-10
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 2019-07-07
    • 1970-01-01
    • 2012-04-05
    相关资源
    最近更新 更多