Циклы Nested For не используют данные следующих лет - PullRequest
0 голосов
/ 09 марта 2020

У меня есть большая симуляция, где мне нужно перемещать отдельные заказы во времени с ежегодным приращением Пример кода показывает только 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")
  }
}

1 Ответ

1 голос
/ 10 марта 2020

То, как вы определили if -общение, неверно. Попробуйте

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){ 
    if(k==1) {
      subsample <- dat[sample(seq_along(dat[, 1]), size = 1,replace=TRUE), c("unused", "apr","oct","used")]
    } else {
      subsample <- 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")
  }
}
...