나는 가중치가 필요한 시계열 데이터를 집계하는 데 도움이되는 함수를 만들고 있습니다. 이 함수는 간격 수준 데이터를 취하여 일별, 주별, 월별, 분기 별 또는 연간 수준으로 집계 할 수 있어야합니다. 아래 코드는 함수에서 제거 될 때 적절한 출력을 가진 xts 객체를 생성하지만 함수는 그렇지 않습니다. 나는 (내 문제가 촬영을 돕기 위해 추가 인쇄 호출로) 아래의 기능을 만들었습니다 NextMethod에서함수 내에 객체 길이가 0이지만 외부에 0이 아닌 이유는 무엇입니까?
오류 (:
agg_cc_xts = function(x, aht, sl, asa, handled, rcvd, period = c("daily",
"weekly",
"monthly",
"quarterly",
"yearly")){
x$wkld = x[,handled] * x[,aht]
x$sl_thresh = x[,rcvd] * x[,sl]
x$asa_calc = x[,handled] * x[,asa]
if(period == "daily"){
a = apply.daily(x[,rcvd], sum, na.rm = TRUE)
b = apply.daily(x[,handled], sum, na.rm = TRUE)
c = apply.daily(x$wkld, sum, na.rm = TRUE)
d = apply.daily(x$sl_thresh, sum, na.rm = TRUE)
e = apply.daily(x$asa_calc, sum, na.rm = TRUE)
} else {
if(period == "monthly"){
a = apply.monthly(x[,rcvd], sum, na.rm = TRUE)
b = apply.monthly(x[,handled], sum, na.rm = TRUE)
c = apply.monthly(x$wkld, sum, na.rm = TRUE)
d = apply.monthly(x$sl_thresh, sum, na.rm = TRUE)
e = apply.monthly(x$asa_calc, sum, na.rm = TRUE)
} else {
if(period == "quarterly"){
a = apply.quarterly(x[,rcvd], sum, na.rm = TRUE)
b = apply.quarterly(x[,handled], sum, na.rm = TRUE)
c = apply.quarterly(x$wkld, sum, na.rm = TRUE)
d = apply.quarterly(x$sl_thresh, sum, na.rm = TRUE)
e = apply.quarterly(x$asa_calc, sum, na.rm = TRUE)
} else {
if(period == "yearly"){
a = apply.yearly(x[,rcvd], sum, na.rm = TRUE)
b = apply.yearly(x[,handled], sum, na.rm = TRUE)
c = apply.yearly(x$wkld, sum, na.rm = TRUE)
d = apply.yearly(x$sl_thresh, sum, na.rm = TRUE)
e = apply.yearly(x$asa_calc, sum, na.rm = TRUE)
} else {
if(period == "weekly"){
a = apply.weekly(x[,rcvd], sum, na.rm = TRUE)
b = apply.weekly(x[,handled], sum, na.rm = TRUE)
c = apply.weekly(x$wkld, sum, na.rm = TRUE)
d = apply.weekly(x$sl_thresh, sum, na.rm = TRUE)
e = apply.weekly(x$asa_calc, sum, na.rm = TRUE)
}
}
}
}
}
print(paste(length(a), class(a), length(.index(a))))
print(paste(length(b), class(b), length(.index(b))))
print(paste(length(c), class(c), length(.index(c))))
print(paste(length(d), class(d), length(.index(d))))
print(paste(length(e), class(e), length(.index(e))))
print(head(a))
print(head(b))
print(head(c))
print(head(d))
print(head(e))
y = cbind.xts(a, b, c, d, e)
y$aht = y$wkld/y$handled
y$sl = y$sl_thresh/y$rcvd
y$asa = y$asa_calc/y$handled
drops = c("wkld", "sl_thresh", "asa_calc")
y = y[, !(names(y) %in% drops)]
return(y)
}
내가 생성 된 데이터 세트에서 실행하면 다음과 같은 에러가 발생합니다. dims [product 274] 객체의 길이와 일치하지 않음
인쇄 호출은 각 열의 길이가 동일하고 rownames의 동일한 수 (색인 생성) 및 개체 아직 동물원/xts입니다.
나는 아래의 샘플 데이터에서이 작업을 실행하고 있습니다 : 제가 답변하는 것이 중요하다고 생각
library(xts)
set.seed(12822)
dates = seq(as.Date("2016-01-01"),
as.Date("2016-09-30"), by="days")
RECEIVED = rnorm(n = length(dates), mean = 8000, sd = 650)
AHT = rnorm(n = length(dates), mean = 650, sd = 15)
HANDLED = RECEIVED - rnorm(n = length(dates), mean = 240, sd = 24)
SL = rnorm(n = length(dates), mean = .75, sd = .25/3.1)
ASA = rnorm(n = length(dates), mean = 46, sd = 13)
df = cbind(dates, RECEIVED, HANDLED, AHT, SL, ASA)
#make sure to use as.xts as the xts() call is used to make NEW xts objects
a.xts = as.xts(df[, -1], order.by = dates)
set.seed(2)
dates = seq(as.Date("2016-01-01"),
as.Date("2016-09-30"), by="days")
RECEIVED = rnorm(n = length(dates), mean = 4500, sd = 300)
AHT = rnorm(n = length(dates), mean = 700, sd = 20)
HANDLED = RECEIVED - rnorm(n = length(dates), mean = 135, sd = 13.5)
SL = rnorm(n = length(dates), mean = .65, sd = .30/3.1)
ASA = rnorm(n = length(dates), mean = 60, sd = 17)
df = cbind(dates, RECEIVED, HANDLED, AHT, SL, ASA)
b.xts = as.xts(df[, -1], order.by = dates)
all = rbind(a.xts, b.xts)
질문은 다음과 같습니다
기능 내부 길이가 0의 객체를 생성 무엇? 이 코드를 콘솔 내부가 아닌 함수 내부에서 실행할 때만 생성되는 이유는 무엇입니까? 이 동작을 어떻게 피할 수 있습니까?
매우 빠른 투표였습니다. 질문을 더 잘하기 위해 내가 할 수있는 것을 설명해주십시오. 고맙습니다! –