首页 > 解决方案 > 数据错误:找不到函数

问题描述

我正在开发一个数据输入屏幕,可以在其中输入数据并创建数据表。我还需要根据用户输入在数据表中创建一列。为此,我在数据表中使用了转换函数。

这样做时,我收到一条错误消息“找不到功能”。

我还附上了我的调试代码

mkifields<-c("Financial_Year","Quarter","Month", "DB_Date","Actual_Date")
ui<- fluidPage(
  titlePanel("Monthly Key Indicators"),
  sidebarLayout(
    sidebarPanel(width=3,
                 textInput("Financial_Year","Financial Year"),
                 selectInput("Quarter","Quarter",c("Q1","Q2","Q3","Q4")),
                 dateInput("Month","Month of Account", format="MM, yyyy"),
                 dateInput("DB_Date", "Detailed Booking Closing Date", format="dd-mm-yyyy"),
                 dateInput("Actual_Date","Actual date of uploading MKI",format="dd-mm-yyyy"),
                 actionButton("save6","Add",icon=icon("plus-square")),
                 actionButton("reset6","Delete",icon=icon("minus-square"))
    ),
    mainPanel(
      mainPanel(
        DT::dataTableOutput("mkiresponses", width = 600), tags$hr()
      ))))
server<- function(input,output,session){
  mkisaveData <- function(data) {
    mkidata <- data.frame(
      Financial_Year=data["Financial_Year"],
      Quarter=data["Quarter"],
      Month=as.Date(as.numeric(data[["Month"]]),"1970-01-01"),
      Detailed_Book_Date=as.Date(as.numeric(data[["DB_Date"]]),"1970-01-01"),
      Actual_Upload_Date=as.Date(as.numeric(data[["Actual_Date"]]),"1970-01-01")
    )
    if (exists("mkiresponses")) {
      mkiresponses <<- rbind(mkiresponses, mkidata)
    } else {
      mkiresponses <<- mkidata
    }
  }
  mkiformData <- reactive({
    mkidata <- sapply(mkifields, function(x) input[[x]])
    mkidata
    #print(data)
  })
  observeEvent(input$save6, {
    mkisaveData(mkiformData())
  })
  mkiloadData <- function() {
    if (exists("mkiresponses")) {
      mkiresponses
    }
  }
  output$mkiresponses <- DT::renderDataTable({
    input$save6
    input$reset6
    mki<-transform(mkiloadData(), Delay=as.numeric((mkiloadData()$Actual_Date)-(mkiloadData()$DB_Date)))
    datatable(mki,rownames=FALSE,options = list(ordering=FALSE, searching=FALSE,paging=FALSE,pageLength=FALSE,info=FALSE))
  })
}
shinyApp(ui,server)

请帮助我解决错误

标签: rshinydt

解决方案


将函数保存mkiloadData()在文件中并使用函数 source()。

server<- function(input,output,session){

  source("/path/to/function_file.R")

  mkisaveData <- function(data) {
    mkidata <- data.frame(
      Financial_Year=data["Financial_Year"],
      Quarter=data["Quarter"],
      Month=as.Date(as.numeric(data[["Month"]]),"1970-01-01"),
      Detailed_Book_Date=as.Date(as.numeric(data[["DB_Date"]]),"1970-01-01"),
      Actual_Upload_Date=as.Date(as.numeric(data[["Actual_Date"]]),"1970-01-01")
    )
    if (exists("mkiresponses")) {
      mkiresponses <<- rbind(mkiresponses, mkidata)
    } else {
      mkiresponses <<- mkidata
    }
  }
  mkiformData <- reactive({
    mkidata <- sapply(mkifields, function(x) input[[x]])
    mkidata
    #print(data)
  })
  observeEvent(input$save6, {
    mkisaveData(mkiformData())
  })

  output$mkiresponses <- DT::renderDataTable({
    input$save6
    input$reset6
    mki<-transform(mkiloadData(), Delay=as.numeric((mkiloadData()$Actual_Date)-(mkiloadData()$DB_Date)))
    DT::datatable(mki,rownames=FALSE,options = list(ordering=FALSE, searching=FALSE,paging=FALSE,pageLength=FALSE,info=FALSE))
  })
}
shinyApp(ui,server)


推荐阅读