首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误:输入必须是向量,而不是NULL。运行`rlang::last_error()`查看错误发生的位置

错误:输入必须是向量,而不是NULL。运行`rlang::last_error()`查看错误发生的位置
EN

Stack Overflow用户
提问于 2021-02-27 23:32:06
回答 1查看 687关注 0票数 0

每当我尝试运行这段代码时:

代码语言:javascript
运行
复制
omnibus[[scenario1$scnid]] <-  
      runTheSim(from = simStart, to = simEnd, scen = scenario1,
                  dmS = dmStatus, fcS = fcStatus, icS = icStatus,
                  dmF = demandFun, fcF = forecastFun, olF = oulFun, 
                  rec1 = oneRecord, recs = allRecords,
                  store1 = empty1Store, stores = allStores)

我一直收到相同的错误:

代码语言:javascript
运行
复制
  Start on simulating inventory for scenario nAppr+dlp+1 from 20 to 2020.
  Error: Input must be a vector, not NULL.
  Run `rlang::last_error()` to see where the error occurred.

运行rlang::last_error()rlang::last_trace()将显示以下内容:

代码语言:javascript
运行
复制
<error/vctrs_error_scalar_type>
Input must be a vector, not NULL.
Backtrace:
 1. global::runTheSim(...)
 5. vctrs:::stop_scalar_type(.Primitive("quote")(NULL), "")
 6. vctrs:::stop_vctrs(msg, "vctrs_error_scalar_type", actual = x)
Run `rlang::last_trace()` to see the full context.
>   rlang::last_trace()
<error/vctrs_error_scalar_type>
Input must be a vector, not NULL.
Backtrace:
    █
 1. ├─global::runTheSim(...)
 2. │ └─dplyr::lag(stores[[fctidx]]) sics.R:84:4
 3. │   ├─vctrs::vec_c(...)
 4. │   └─vctrs::vec_slice(inputs$x, seq_len(xlen - n))
 5. └─vctrs:::stop_scalar_type(.Primitive("quote")(NULL), "")
 6.   └─vctrs:::stop_vctrs(msg, "vctrs_error_scalar_type", actual = x)

我的一个朋友运行同样的代码,没有得到一个错误,而是一个30的循环。

你能帮帮我吗?

谢谢!

EN

回答 1

Stack Overflow用户

发布于 2021-02-28 01:12:28

代码语言:javascript
运行
复制
icIni <- list(leadtime = 5, review = 3, fixedConstant = 8, csl = 0.9)
str(icIni)
icIni[[1]] #or# 
icIni$leadtime
icIni$safetyfactor <- qnorm(icIni$csl) # (unit) normal distribution!
str(icIni)

dmIni <- list(
  bare = numeric(), # past observations (at times 1, ..., t-1, t, t+1, ...)
  term = with(icIni, {leadtime + review}), # track blocks; 1 = no block
  blck = numeric() # past blocked observations 
)

fcIni <- list( # (initial) values for several parameters
  initOK  = FALSE, # has the list been properly initialized?
  smthpar = list(alpha = .2, beta = 0.1, gamma = 0.1),  # smoothing parameter
  other   = list(), # other stuff goes here (like for dlp/crs)
  latestfc = NA
)

fctIDs = c("dlp", "crs", "nai", "zer", "ses")
oulIDs = c("nAppr", "errQ", "nMod", "qMod", "bootM", "Eq8", "Eq9", "fxCst")
demIds <- c("bernoulliPoisson","geometricUniform", "normal" )

# 2 Pick scenarios, and set-up objects (for storing) ----
# scenarios
approaches <- list(oulid = oulIDs, fctid = fctIDs,
                   demid = demIds, blck = c("1", "b"))
scenarios <- cross_df(approaches)
rm(approaches, fctIDs, oulIDs, demIds)

scenarios
scenarios <-  mutate(scenarios, 
                     lt = icIni$leadtime, rt = icIni$review,
                     agg = ifelse(blck =="1", lt+rt, 1),
                     csl = icIni$csl)
scenarios <- mutate(scenarios, scnid = 
                      paste(oulid, fctid, blck, sep = "+"), .before = 1)
scenarios <- mutate(scenarios, fctidx = paste0(fctid, blck))
scenarios <- dataUnUsedInOul(scenarios) # adds variable usedinoul
scenarios <- setParameters4Dem(scenarios) # adds par. values for demand
scenarios

# select scenarios
myScenarios <- c("fxCst+crs+1","nAppr+dlp+b","errQ+nai+b",
                 "nMod+ses+b","Eq9+zer+1","bootM+crs+1") # example
myScenarios <- c("qMod+crs+1","qMod+dlp+1","bootM+crs+b","bootM+dlp+b")
tbFolder <- filter(scenarios, scnid %in% myScenarios)
tbFolder <- filter(scenarios, notinoul == "---")
tbFolder <- filter(scenarios, notinoul == "---"& demid == "bernoulliPoisson")
tbFolder
# tbFolder <- scenarios

# skeleton (empty) objects for keeping track of simulated values
# of forecasts and demands:
base1Store <- map_dfc(c("epoch", "dem", "blk"), 
                       setNames, object = list(as.numeric(NA)))
base1Store

# inventory levels, amounts shipped and ordered, ...
oneRecord <- map_dfc(c("per", "bopNS", "bopIP", "orderArrival", "avail2Ship",
                       "demand", "required", "shipped", "unserved", "eopNS", 
                       "eopIP", "canOrder", "orderPlaced", "oul"), 
                     setNames, object = list(as.numeric(NA)))

# fill initial (right before simulation starts) inventory record with values:
oneRecord <-  within(oneRecord, { orderPlaced <- eopNS <- eopIP <- 0 }) 
oneRecord

# constants: for length of time interval
numWarmUpForecasts <- 17
numInventorySimulations <- 2000

omnibus <- list() # collects all simulated data

# 3 Start Big Loop, picking one scenario at a time ----
tic("All loops:")
for (ii in 1:nrow(tbFolder)) { # ii <- 1; ii <- 2; ii <- 3
  cat("\n"); tic("This loop")
  dmStatus <- dmIni; fcStatus <- fcIni; icStatus <- icIni
  scenario1 <- as.list(slice(tbFolder,ii)) # 1 scenario as a list
  # str(scenario1)
  
  TellMe <- paste0("Simulating scenario ", ii)
  TellMe <- paste0(TellMe, " (",nrow(tbFolder),"): ", scenario1$scnid)
  print(paste0(TellMe, " under ", scenario1$demid, " demand."))
  
  demandFun <- with(scenario1, createRandomVariable(demid, par = c(par1, par2)))
  
  # draw enough demands such that forecast parameters can be initialized
  while (!fcStatus$initOK) {
    dmStatus <- processNewValue(demandFun(), dmStatus)
    if (scenario1$blck == "1"){
      obsVals <- dmStatus$bare
    } else { obsVals = dmStatus$blck } # if - else should not matter
    fcStatus <- initializeForecasting1(scenario1, obsVals, fcStatus)
  }
  
  startingPeriods4Casts <- length(dmStatus$bare) # using $blck: same result
  
  empty1Store <- mutate(base1Store, !! scenario1$fctidx := as.numeric(NA))
  empty1Store
  allStores <- slice(empty1Store, rep.int(1, startingPeriods4Casts))
  allStores <- mutate(allStores, epoch = 1 : startingPeriods4Casts, 
                      dem = dmStatus$bare, blk = dmStatus$blck)
  allStores
  
  # 3a Warming up: run forecast during warming up interval ----
  forecastFun <- create4CastFunction(scenario1$fctid, fcS = fcStatus)
  # and run forecasts on warming-up interval ...
  for (jj in (1 : numWarmUpForecasts)) { # jj <- 1
    t <- startingPeriods4Casts + jj # the current time period
    dmStatus <- processNewValue(demandFun(), dmStatus)
    oneStore <- update1Storage(t, dmStatus, forecastFun, 
                               scenario1, oneS = empty1Store)
    allStores <- bind_rows(allStores, oneStore)
  }
  allStores
  
  icStatus$aggreg <- scenario1$agg
  oulFun <- createOULRule(scenario1$oulid, xpar = icStatus)
  
  allRecords <- oneRecord # allRecords will expand and collect all records
  
  simStart <-  allStores[[nrow(allStores), "epoch"]] + 1
  simEnd <- simStart + numInventorySimulations
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66400361

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档