首页 > 解决方案 > R Shiny:如何调用依赖于另一个函数输出的函数?

问题描述

我需要返回一个函数调用的输出,该函数调用将另一个函数的输出作为参数。

到目前为止,这是我的脚本:

# Define server logic ----
server <- function(input, output) {

  output$e_returns <- DT::renderDataTable(
    DT::datatable(df_er, options = list(paging = FALSE, searching = FALSE))
  )

  # Creating the portfolio output
  pf_old_list <- reactive({ mc_func(input$e_world, input$e_eme, input$e_fm, input$e_sc, input$e_danske, input$b_danske, 
                         input$indekser, input$global_ig, input$global_hy, input$emd, input$loans, input$pe, 
                         input$pd, input$infrastruktur, input$ejendomme, input$skov) }) 

  pf_new_list <- reactive({ mc_func(input$new_e_world, input$new_e_eme, input$new_e_fm, input$new_e_sc, input$new_e_danske, input$new_b_danske, 
                         input$new_indekser, input$new_global_ig, input$new_global_hy, input$new_emd, input$new_loans, input$new_pe, 
                         input$new_pd, input$new_infrastruktur, input$new_ejendomme, input$new_skov) })

  pf_key_stats <- reactive({ pretty_output(pf_old_list, pf_new_list) })

  # Outputting the desired figures in a pretty format
  output$pf_key_figures <- DT::renderDataTable({
    DT::datatable(pf_key_stats, options = list(paging = FALSE, searching = FALSE))
  })
}

mc_func返回 7 个数字的列表。

pretty_output返回将这些数字格式化为数据框对象的数据框。代码如下所示:

pretty_output <- function(pf1, pf2) {

  pf1_vect <- as.numeric(unlist(pf1))
  pf2_vect <- as.numeric(unlist(pf2))
  output_data <- data.frame(key_figures, pf1_vect, pf2_vect)
  names(output_data) <- c('xx', 'aa', 'bb')
  return(output_data)
}

我得到的错误信息是:

reactive({
    pretty_output(pf_old_list, pf_new_list)
}) 
function ()  
 - attr(*, "observable")=Classes 'Observable', 'R6' reactive({     pretty_output(pf_old_list, pf_new_list) }) 
 - attr(*, "class")= chr [1:2] "reactiveExpr" "reactive"
Warning: Error in DT::datatable: 'data' must be 2-dimensional (e.g. data frame or matrix)
  [No stack trace available]

因此,我怀疑此行返回的对象pf_key_stats <- reactive({ pretty_output(pf_old_list, pf_new_list) })格式错误。

当我在服务器之外运行这些功能时,它可以完美运行。

标签: rshiny

解决方案


推荐阅读