Я делаю несколько циклов и хочу создать фрейм данных с разными результатами.
MWE выглядит следующим образом:
# define cases
debt <-c(0,0.05)
thetas <- c(1, 1.5)
rhos <- c(0, 0.99, 2) # 0:C-D case, 1 = linear (no effect on prices)%
Затем хотите перебрать вышеуказанные векторы
for (theta in thetas){
for (rho in rhos){
for (b in debt) {
sols <-nleqslv(0.05, k_ss) # k_ss is defined in the end
kss <-round(sols$x,5)
}
}
}
Я хочу, чтобы в каждой итерации сохранялись значения kss
и создавался фрейм данных, который должен по существу суммировать все возможные комбинации (i.e. length(theta)*length(rho)*length(debt) = 12 in this example)
в одном простом для понимания фрейме данных.
Мой ожидаемый результат должен выглядеть следующим образом:
thetas <- c(1, 1.5)
rhos <- c(0,0.99, 2) # 0:C-D case, 1 = linear (no effect on prices)%
debts <-c(0,0.05)
n = length(debt)*length(thetas)*length(rhos)
theta<-c(rep(1,6),rep(1.5,6))
rho <-c(rep(0,2),rep(0.99,2), rep(2,2), rep(0,2),rep(0.99,2), rep(2,2))
debt <-rep(c(0,0.05),6)
kss <-rnorm(12,0,1) # suppose these are my true ('expected' kss valuesthat i get for the iterations
df <- data.frame(theta,rho,debt,kss)
df
theta rho debt kss
1 1.0 0.00 0.00 1.1090
2 1.0 0.00 0.05 1.8436
3 1.0 0.99 0.00 0.7718
4 1.0 0.99 0.05 0.5628
5 1.0 2.00 0.00 -1.1774
6 1.0 2.00 0.05 2.1973
7 1.5 0.00 0.00 0.8531
8 1.5 0.00 0.05 -0.1252
9 1.5 0.99 0.00 0.4784
10 1.5 0.99 0.05 1.8334
11 1.5 2.00 0.00 0.3693
12 1.5 2.00 0.05 1.0470
Только для записи вот как генерируется мой kss :
# compute steady state
k_ss<-function(k){
# this function is defined for given values in b, theta, rho
# all other variables not defined here are some scalars not defined here
# for simplicity
if (rho == 0){
R <- A*alpha*k^(alpha-1)
w <- A*(1-alpha)*k^(alpha)
} else{
y <-A*(alpha*k^rho + (1-alpha))^(1/rho)
R <- A*alpha*(y/A*k)^(1-rho)
w <- A*(1-alpha)*(y/A)^(1-rho)
}
kt <-nn*(dt/beta*nn)^(1/theta)
sd <-((beta*R)^(1/theta))*(1+kt)/(R+(beta*R)^(1/theta)*(1+kt))
mpb <-(1/nn)*(kt/(1+kt))
ego <-sd/(1-sd*mpb*R)
kss <-(nn)*(k+b) - (ego*(w-(R-nn)*b))
return(kss)
}
А потом:
sols <-nleqslv(0.05, k_ss)
kss <-round(sols$x,5)