我具有一个功能,可以根据部门号以及该时间段内该部门中发生的事件次数,在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))