我正在开发一个数据输入屏幕,可以在其中输入数据并创建dataTable。我还需要根据用户输入在数据表中创建一列。为此,我在数据表中使用了转换功能。
在执行此操作时,出现错误消息“找不到功能”。
我还将附加我的代码以进行调试
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)
请帮助我解决错误
答案 0 :(得分:0)
将功能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)