Как создать функцию, которая сбрасывает все объекты и векторы в нулевые или начальные значения? - PullRequest
0 голосов
/ 30 марта 2020

Я ищу способ создания , которая сбрасывает все объекты и векторы в их начальные состояния. Я пытаюсь создать с итерациями, которые сбрасывают определенные объекты и векторы в конце симуляции.

Я пытался создать функцию с именем reset, а затем просто вызывать ее с помощью reset(), но, казалось бы, она никогда не создаст объекты или, по крайней мере, они не будут отображаться в среде для использования.

Ниже приведены только векторы и объекты, которые я хотел бы выполнить для сброса.

reset = {
  iteration = (1:2)  ## Number of periods in the iteration of the loop.

  a = c() #lower bound of belief in xstar 
  b = c() #upper bound of belief in xstar

  #w1star = runif(1, min = 0, max = 3)
  #w2star = runif(1, min = 0, max = 3)

  D = 5 ## monetary value of harm from 

  maxw = 3
  minw = 0

  wbar = (maxw+minw)/2  ##average cost

  xstar = 1 - wbar/(2*D) #true legal threshold given that the court does not create multiple rules for each cost type, but instead makes one for all types, based on the average.
  xstar

  x1 = c()
  x2 = c()
  x3 = c()
  x  = c()

  w1 = runif(1,min = 0, max = 3) #cost of effort for person 1
  w2 = runif(1,min = 0, max = 3)
  w3 = runif(1,min = 0, max = 3)

  na = c()
  na1 = c()
  na2 = c()
  na3 = c()

  aggiter = c()
  aggnai = c()
}

1 Ответ

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

Я бы предположил, что лучше добиться того, что вы делаете, альтернативным способом.

Я бы создал список, называемый state0, который содержит начальное состояние, а затем создал новый объект, который меняет состояние по мере роста вашей симуляции. Например:

# initialize the state
state0 <- list()
state0$iteration < 1:2
state0$a <- numeric()
state0$b <- numeric()
state0$D <- 5
state0$maxw <- 3
state0$minw <- 0
...

# assign initial state
state <- state0

# do the simulation
...simulation
...goes
...here

# reset
state <- state0

Если вы действительно хотите сделать это с помощью функции, вы должны назначить переменные таким образом, чтобы они изменялись в глобальной области видимости, а не только локально внутри функции. В вашем конкретном случае c будет работать специальное назначение <<-:

reset <- function() {
  iteration <<- 1:2
  a <<- numeric()
  b <<- numeric()
  D <<- 5
  maxw <<- 3
  minw <<- 3
  ...
}

reset()
...