Simmer Get_attribute |没有到达运行错误

时间:2017-11-17 18:33:34

标签: r simulation event-simulation

首先,这个simmer_vignette和此链接advanced_simmer_usage似乎表明错误源于“get_name,get_attribute和get_prioritization意图在轨道内使用;否则,将无法运行,这些功能将引发错误“ 一个最小的可行示例:

  patient_traj <- trajectory(name = "patient_trajectory") %>%
  set_attribute("my_key", 123) %>%
  timeout(5) %>%
  set_attribute("my_key", function() get_attribute(env, "my_key") + 1) %>%
  timeout(5) %>%
  set_attribute("dependent_key", function() ifelse(get_attribute(env, "my_key")<=123, 1, 0)) %>%
  timeout(5) %>%
  set_attribute("independent_key", function() runif(1))

env<- simmer() %>%
  add_generator("patient", patient_traj, at(0), mon = 2)
env %>% run()
#> simmer environment: anonymous | now: 15 | next: 
#> { Generator: patient | monitored: 2 | n_generated: 1 }

get_mon_attributes(env)
#>   time     name             key       value replication
#> 1    0 patient0          my_key 123.0000000           1
#> 2    5 patient0          my_key 124.0000000           1
#> 3   10 patient0   dependent_key   0.0000000           1
#> 4   15 patient0 independent_key   0.9234335           1

现在这可以正常工作,当我尝试在任何其他意义上调用get_attribute()时问题就开始了。在轨迹定义的最末端的set_attribute()之后添加此行:

log_(get_attribute(env, "independent_key"))

抛出上述错误。 我真正想做的是调用“离开”函数并将其作为概率属性赋予它。我仍然在轨道上这样做。

leave(prob = get_attribute(env, "independent_key"))

毋庸置疑,这也会引发错误“get_attribute_中的错误(私有$ sim_obj,密钥,全局):没有到达运行”。 有谁知道这会导致什么?我觉得唯一的选择是上面的解释“get_attribute意味着在轨道内使用” - 但我觉得我在做这个。

谢谢!

1 个答案:

答案 0 :(得分:2)

好吧,我很尴尬地说这个,但问题很容易解决。似乎问题是直接访问属性。
因此log_(get_attribute(env, "independent_key"))不起作用,但log_(function() get_attribute(env, "independent_key"))会起作用 这就是全部 如果有人解释为什么这就是全部,我会非常感激。