R Simmer-使用set_属性和get_属性以及复制(使用lappy)

R Simmer-使用set_属性和get_属性以及复制(使用lappy),r,R,我正在尝试组合set_属性和get_属性复制(使用lappy) 以下没有“get_属性”的代码运行良好: library(simmer) SystemTime <- 200 delay= c(20,40,60,80,100,120,140,160,180,200)/60 set.seed(1234) elevators <- simmer() worker <- trajectory("elevators service") %>% #trajector

我正在尝试组合set_属性和get_属性复制(使用lappy) 以下没有“get_属性”的代码运行良好:

library(simmer)    

SystemTime <- 200
delay= c(20,40,60,80,100,120,140,160,180,200)/60
set.seed(1234)

elevators <- simmer()

worker <-
  trajectory("elevators service") %>% #trajectory name
  log_("new worker arrived") %>% #
  set_attribute("start_time", function() {now(elevators)}) %>%
  seize("elevator",amount = 1) %>% #elevator queue and service 
  timeout(function() sample(delay,1)) %>%
  release("elevator") 


elevators <-lapply(1:100, function(i) {
  simmer("elevators") %>%
  add_generator("worker", worker, function() exp(2)) %>% 
    add_resource("elevator",capacity = 2) %>% 
  run(until = SystemTime)

})
library(simmer)
系统时间%
扣押(“电梯”,数量=1)%>%#电梯队列和服务
超时(函数()示例(延迟,1))%>%
释放(“电梯”)
电梯%
添加_生成器(“worker”,worker,function()exp(2))%>%
添加资源(“电梯”,容量=2)%>%
运行(直到=系统时间)
})
当我添加“get_属性”时,如下所示:

library(simmer) 

SystemTime <- 200
delay= c(20,40,60,80,100,120,140,160,180,200)/60
set.seed(1234)

elevators <- simmer()

worker <-
  trajectory("elevators service") %>% #trajectory name
  log_("new worker arrived") %>% #
  set_attribute("start_time", function() {now(elevators)}) %>%
  seize("elevator",amount = 1) %>% #elevator queue and service 
  timeout(function() sample(delay,1)) %>%
  log_(function() {paste("Waited: ", now(elevators) - get_attribute(elevators, "start_time"))}) %>%
  release("elevator") 


elevators <-lapply(1:100, function(i) {
  simmer("elevators") %>%
  add_generator("worker", worker, function() exp(2)) %>% 
    add_resource("elevator",capacity = 2) %>% 
  run(until = SystemTime)

})
library(simmer)
系统时间%
扣押(“电梯”,数量=1)%>%#电梯队列和服务
超时(函数()示例(延迟,1))%>%
日志(函数(){粘贴(“等待:”,现在(电梯)-获取属性(电梯,“开始时间”)})%>%
释放(“电梯”)
电梯%
添加_生成器(“worker”,worker,function()exp(2))%>%
添加资源(“电梯”,容量=2)%>%
运行(直到=系统时间)
})
我得到以下错误:

运行时出错(私有$sim_obj,直到):评估错误:存在 没有到达运行


寻求有关如何解决此问题的帮助?

您的第一个示例运行正常,但实际上效果不佳。基本上,你有一个范围问题。仿真环境必须在轨迹的范围内,以便
get_attribute
(和
now
)可以看到它。解决方案是将所有内容放在同一个函数中:

library(simmer) 

SystemTime <- 200
delay= c(20,40,60,80,100,120,140,160,180,200)/60
set.seed(1234)

elevators <-lapply(1:100, function(i) {
  elevator <- simmer("elevator")

  worker <-
    trajectory("elevator service") %>% #trajectory name
    log_("new worker arrived") %>% #
    set_attribute("start_time", function() {now(elevator)}) %>%
    seize("elevator",amount = 1) %>% #elevator queue and service 
    timeout(function() sample(delay,1)) %>%
    log_(function() {paste("Waited: ", now(elevator) - get_attribute(elevator, "start_time"))}) %>%
    release("elevator") 

  elevator %>%
    add_generator("worker", worker, function() rexp(1, 2)) %>% 
    add_resource("elevator", capacity = 2) %>% 
    run(until = SystemTime)
})
library(simmer)
SystemTime%#电梯排队和服务
超时(函数()示例(延迟,1))%>%
日志(函数(){paste(“Waited:”,now(电梯)-get_属性(电梯,“开始时间”)})%%>%
释放(“电梯”)
电梯%>%
添加_生成器(“worker”,worker,function()rexp(1,2))%>%
添加资源(“电梯”,容量=2)%>%
运行(直到=系统时间)
})

还请注意,我在生成器中将
exp(2)
替换为
rexp(1,2)
,我认为这正是您真正想要的。

Dor,我对您的问题做了一些简单的编辑。很明显,作为新用户,您已经花了时间和精力学习如何使用这些工具发布SO问题。做得好。我希望您能得到您想要的答案。您好,谢谢您的快速响应,它非常有用。您知道如何将属性值插入到数据帧中吗?例如,如何为每个复制存储get_mon_资源(env)?关于属性,请在
add_generator
中为希望保存属性的属性设置
mon=2
,并使用
get\u mon\u属性
检索它们。关于复制,
get\u mon\u resources
,以及
get\u mon\u arrival
get\u mon\u attributes
,也适用于模拟环境列表。因此,您可以在我之前的回复中使用
get\u mon\u resources(电梯)
获取它们。谢谢!,它正在工作,但是语句“function(){now(电梯)}”没有给我值。