У меня есть большая симуляция, где мне нужно перемещать отдельные заказы во времени с ежегодным приращением Пример кода показывает только 10 ежегодных приращений по 10 заказов, но когда я запускаю его, он не получает информацию за следующий год, и я получаю ошибку: «Ошибка в if (unused [i]> 200) { : аргумент имеет нулевую длину ".
В коде i - приращение заказов, а k - приращение лет. Если year = 1, это выборки из исходного набора данных: dat. В конце вычислений он должен взять то, что было выбрано, и создать новый набор данных с именем newdat, но теперь с новым и уменьшенным значением для неиспользованного. Если year> 1, он должен взять кадр данных newdat и сэмплировать его для новых данных, и процесс должен повториться. Но пока это не сработало.
dat <- data.frame(cbind(rnorm(30,600,sd=100),rnorm(30,300,sd=50),rnorm(30,200,sd=50),rnorm(30,600,sd=100)))
colnames(dat) <- c("unused","apr","oct","used")
unused <- NULL
deduct <- NULL
carryover <- NULL
used <- NULL
apr <- NULL
oct <- NULL
available <- NULL
#_____________________________________ Sample Data _____________________________________________________
for (i in 1:10) {
for (k in 1:10){
subsample <- if(k==1) dat[sample(seq_along(dat[, 1]), size = 1,replace=TRUE), c("unused", "apr","oct","used")]
subsample <- if(k > 1) newdat[sample(seq_along(newdat[, 1]), size = 1,replace=TRUE), c("unused", "apr","oct","used")]
unused[i] <-subsample$unused
apr[i] <- subsample$apr
oct[i] <- subsample$oct
used[i] <- subsample$used
#_____________________________________ Use Data _____________________________________________________
if (unused[i] > 200) {
deduct[i] <- unused[i]-200
carryover[i] <- 200
available[i] <- carryover[i]+apr[i]+oct[i]
}
if (unused[i] <= 200) {
deduct[i] <- 0
carryover[i] <- unused[i]
available[i] <- carryover[i]+apr[i]+oct[i]
}
#_____________________________________ Create DataFrame for following years _________________________
unused <- available-used
newdat <- data.frame(cbind(unused,apr,oct,used))
colnames(newdat) <- c("unused","apr","oct","used")
}
}