【发布时间】:2019-02-18 11:12:40
【问题描述】:
我有一个函数可以根据部门编号以及某个时间段内该部门发生的事件次数在 Shiny 中创建数据表。我的问题是,如果日期范围足够短,那么任何部门都不会发生事件。在这些情况下,我收到错误 Error in rowSums(x) : 'x' must be an array of at least two dimensions,它最初只是出现在 Shiny 应用程序中,您可以忽略它。现在,应用程序崩溃了,你必须回到 R 来查看它。
我了解错误发生的原因,但我不知道是否有针对我的情况的解决方法,因为在数据子集之前我不知道事件是否发生。该函数在我的代码中被调用了多次,所以我不想每次使用时都在函数外部编写if 语句。
我尝试在定义 b 之后立即添加 if(length(b$Department <= 1)){tab<-renderDataTable({datatable(NULL)})},然后在函数的其余部分周围添加了一个 else 语句,但我收到了消息 Warning: Error in [.data.frame: undefined columns selected
我还尝试了其他 if 语句,例如创建一个充满 NAs 的数据框,但这返回了原始错误消息。
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))
【问题讨论】: