空数据表闪亮

时间:2018-09-13 16:56:11

标签: r shiny dt

我具有一个功能,可以根据部门号以及该时间段内该部门中发生的事件次数,在Shiny中创建数据表。我的问题是,如果日期范围足够短,则没有部门会发生此事件。在这些情况下,我收到错误Error in rowSums(x) : 'x' must be an array of at least two dimensions,该错误最初只是出现在Shiny应用程序中,您可以忽略它。现在,该应用程序崩溃了,您必须回到R进行查看。

我了解为什么会发生错误,但是我不知道针对我的情况是否有解决方法,因为在数据是子集之前,我不知道事件是否会发生。在我的代码中多次调用该函数,因此,我不想每次使用该函数时都在该函数外编写一个if语句。

我尝试在定义if(length(b$Department <= 1)){tab<-renderDataTable({datatable(NULL)})}之后立即添加b,然后在该函数的其余部分周围添加else语句,但是得到消息Warning: Error in [.data.frame: undefined columns selected

我还尝试了其他if语句,例如创建一个充满NA的数据框,但这返回了原始错误消息。

dept.table<-function(df, date1, date2){
  a<-df[which(DATE >= as.Date(date1) & DATE <= as.Date(date2)),]
  b<-as.data.frame(table((a[,c("Event", "Department")])))
  d<-reshape(b, direction="wide", idvar="Event", timevar="Department")
  names(d)<-sub('^Freq\\.', '', names(d)) 
  d$Total<-round(rowSums(d[,-1]), 0)
  levels(d$Event)<-c(levels(d$Event), "Total")
  d<-rbind(d, c("Total", colSums(d[,-1])))tab<-DT::renderDataTable({
  datatable(d, extensions="FixedColumns", options=list(dom='t', scrollX=T, fixedColumns=list(leftColumns=1, rightColumns=1)), rownames=FALSE)
 })
}

样本数据

 df<-data.frame(Department=rep(100:109, 3), Event=rep(c("A", "B", "C"),10),
     Date=sample(seq(as.Date('2018/01/01'), as.Date('2018/09/01'), by="day"), 30))

0 个答案:

没有答案