У меня есть функция для создания таблицы данных в 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
s, но это вернуло исходное сообщение об ошибке.
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))