簡體   English   中英

在 R 中多次運行 For-Loop 並將結果保存在數據框中

[英]Run For-Loop multiple times in R and save results in data frame

我在處理R和在論壇上還是比較新的,所以請原諒我一兩個錯誤。 我想要做的是:我想為每個 14 個變量生成 6000 個觀察值。

這是我到目前為止所做的。 我已經用適當的長度為每個變量初始化了向量:

#Market1
price_1                           <- vector(mode = "numeric", length = 6002)
demandChartist_1                  <- vector(mode = "numeric", length = 6000)
demandFundamentalist_1            <- vector(mode = "numeric", length = 6001)
percentFT_Wf_1                    <- vector(mode = "numeric", length = 6001)
percentCT_Wc_1                    <- vector(mode = "numeric", length = 6001)
fitnessTradingFundamentalist_Af_1 <- vector(mode = "numeric", length = 6001)
fitnessTradingChartist_Ac_1       <- vector(mode = "numeric", length = 6001)

#Market2
price_2                           <- vector(mode = "numeric", length = 6002)
demandChartist_2                  <- vector(mode = "numeric", length = 6000)
demandFundamentalist_2            <- vector(mode = "numeric", length = 6001)
percentFT_Wf_2                    <- vector(mode = "numeric", length = 6001)
percentCT_Wc_2                    <- vector(mode = "numeric", length = 6001)
fitnessTradingFundamentalist_Af_2 <- vector(mode = "numeric", length = 6001)
fitnessTradingChartist_Ac_2       <- vector(mode = "numeric", length = 6001)

percentNoTrading                  <- vector(mode = "numeric", length = 6001)
T <- 1:6000

下一步是設置起始值。

# set the first 4 values for price equal to 0, 1 whatever otherwise we can't compute the previous periods
price_1[1:4]  <- 0 
price_2[1:4]  <- 0 
fitnessTradingChartist_Ac_1[1:3] <- 0
fitnessTradingFundamentalist_Af_1[1:3] <- 0
fitnessTradingChartist_Ac_2[1:3] <- 0
fitnessTradingFundamentalist_Af_2[1:3] <- 0
a       <- 1
b       <- 0.05
c       <- 0.05
d       <- 0.975
e       <- 300
F1      <- 0
F2      <- 0

我設法設置了 For 循環,以便所有向量都填充有隨機生成的值。 (見代碼)由於這些是隨機生成的值,如果我可以多次執行循環並為每個變量創建一個 dataframe,model 的准確性將顯着提高,其中第一次運行的 6000 個觀察值存儲在第 1 列中,第二次運行的 6000 個觀察值存儲在第 2 列等中,我最終可以計算每個時期的平均值。

for (i in 4:6002) {
  # [i-2] weil fitness tradingchartist der jetzigen Periode Demand der Periode t-2 also 2 erfordert.
  demandChartist_1[i-2]  =  
    b * (price_1[i-2] - price_1[i-3]) + rnorm(1, mean=0, sd=0.05)
  # [i-2] weil fitness tradingFundamentalist der jetzigen Periode Demand der Periode t-2 also 2 erfordert.

  demandChartist_2[i-2]  =  
    b * (price_2[i-2] - price_2[i-3]) + rnorm(1, mean=0, sd=0.05)

  demandFundamentalist_1[i-2] = 
    c * (F1 - price_1[i-2]) + rnorm(1, mean=0, sd=0.01)

  demandFundamentalist_2[i-2] = 
    c * (F2 - price_2[i-2]) + rnorm(1, mean=0, sd=0.01)

  fitnessTradingChartist_Ac_1[i] = 
    (exp(price_1[i]) - exp(price_1[i-1])) * demandChartist_1[i-2] + 
    d * fitnessTradingChartist_Ac_1[i-1]

  fitnessTradingChartist_Ac_2[i] = 
    (exp(price_2[i]) - exp(price_2[i-1])) * demandChartist_2[i-2] + 
    d * fitnessTradingChartist_Ac_2[i-1]

  fitnessTradingFundamentalist_Af_1[i] = 
    (exp(price_1[i]) - exp(price_1[i-1])) * demandFundamentalist_1[i-2] + 
    d * fitnessTradingChartist_Ac_1[i-1]  

  fitnessTradingFundamentalist_Af_2[i] = 
    (exp(price_2[i]) - exp(price_2[i-1])) * demandFundamentalist_2[i-2] + 
    d * fitnessTradingChartist_Ac_2[i-1]  

  percentCT_Wc_1[i] = 
    exp(e * fitnessTradingChartist_Ac_1[i]) / 
    (exp(e * fitnessTradingChartist_Ac_1[i]) + 
       exp(e * fitnessTradingFundamentalist_Af_1[i]) + 
       exp(e * fitnessTradingChartist_Ac_2[i]) + 
       exp(e * fitnessTradingFundamentalist_Af_2[i]) +
       exp(0)
    )

  percentCT_Wc_2[i] = 
    exp(e * fitnessTradingChartist_Ac_2[i]) / 
    (exp(e * fitnessTradingChartist_Ac_1[i]) + 
       exp(e * fitnessTradingFundamentalist_Af_1[i]) +
       exp(e * fitnessTradingChartist_Ac_2[i]) + 
       exp(e * fitnessTradingFundamentalist_Af_2[i]) + 
       exp(0)
    )

  percentFT_Wf_1[i] = 
    exp(e * fitnessTradingFundamentalist_Af_1[i]) / 
    (exp(e * fitnessTradingChartist_Ac_1[i]) + 
       exp(e * fitnessTradingFundamentalist_Af_1[i]) +
       exp(e * fitnessTradingChartist_Ac_2[i]) + 
       exp(e * fitnessTradingFundamentalist_Af_2[i]) + 
       exp(0)
    )

  percentFT_Wf_2[i] = 
    exp(e * fitnessTradingFundamentalist_Af_2[i]) / 
    (exp(e * fitnessTradingChartist_Ac_1[i]) + 
       exp(e * fitnessTradingFundamentalist_Af_1[i]) +
       exp(e * fitnessTradingChartist_Ac_2[i]) + 
       exp(e * fitnessTradingFundamentalist_Af_2[i]) + 
       exp(0)
    )

  percentNoTrading[i] = 
    1- percentCT_Wc_1[i] - percentFT_Wf_1[i] - percentCT_Wc_2[i] - percentFT_Wf_2[i]

  price_1[i] = 
    price_1[i-1] + 
    a * ((percentCT_Wc_1[i-1] * demandChartist_1[i-1] + 
        percentFT_Wf_1[i-1] * demandFundamentalist_1[i-1]
          )
        ) + 
    rnorm(1, mean=0, sd=0.01)

  price_2[i] = 
    price_2[i-1] + 
    a * ((percentCT_Wc_2[i-1] * demandChartist_2[i-1] + 
        percentFT_Wf_2[i-1] * demandFundamentalist_2[i-1]
          )
        ) + 
    rnorm(1, mean=0, sd=0.01)
}

有誰知道如何做到這一點? 如果有任何幫助,我將不勝感激! 干杯

您的代碼肯定不容易跟蹤。

在這里,我將嘗試更改幾點,您希望獲得 14 個 dataframe 50 列和 6000 個觀察值。

# definition of dataframe
#Market1
price_1                           <- matrix(ncol = 50, nrow =6002, 0L)
demandChartist_1                  <- matrix(ncol = 50, nrow =6002, 0L)
demandFundamentalist_1            <- matrix(ncol = 50, nrow =6002, 0L)
percentFT_Wf_1                    <- matrix(ncol = 50, nrow =6002, 0L)
percentCT_Wc_1                    <- matrix(ncol = 50, nrow =6002, 0L)
fitnessTradingFundamentalist_Af_1 <- matrix(ncol = 50, nrow =6002, 0L)
fitnessTradingChartist_Ac_1       <- matrix(ncol = 50, nrow =6002, 0L)

#Market2
price_2                           <- matrix(ncol = 50, nrow =6002, 0L)
demandChartist_2                  <- matrix(ncol = 50, nrow =6002, 0L)
demandFundamentalist_2            <- matrix(ncol = 50, nrow =6002, 0L)
percentFT_Wf_2                    <- matrix(ncol = 50, nrow =6002, 0L)
percentCT_Wc_2                    <- matrix(ncol = 50, nrow =6002, 0L)
fitnessTradingFundamentalist_Af_2 <- matrix(ncol = 50, nrow =6002, 0L)
fitnessTradingChartist_Ac_2       <- matrix(ncol = 50, nrow =6002, 0L)

percentNoTrading                  <- matrix(ncol = 50, nrow =6002, 0L)

然后,您對第一個值的定義:

#set the first 4 values for price equal to 0, 1 whatever otherwise we cant compute the previous periods
price_1[1:4,]  <- 0 
price_2[1:4,]  <- 0 
fitnessTradingChartist_Ac_1[1:3,] <- 0
fitnessTradingFundamentalist_Af_1[1:3,] <- 0
fitnessTradingChartist_Ac_2[1:3,] <- 0
fitnessTradingFundamentalist_Af_2[1:3,] <- 0
a       <- 1
b       <- 0.05
c       <- 0.05
d       <- 0.975
e       <- 300
F1      <- 0
F2      <- 0

最后,您的一大段代碼包括第二個列循環

for(j in 1:50)
{
  for (i in 4:6002) {
    # [i-2] weil fitness tradingchartist der jetzigen Periode Demand der Periode t-2 also 2 erfordert.
    demandChartist_1[i-2,j]  =  
      b * (price_1[i-2,j] - price_1[i-3,j]) + rnorm(1, mean=0, sd=0.05)
    # [i-2] weil fitness tradingFundamentalist der jetzigen Periode Demand der Periode t-2 also 2 erfordert.

    demandChartist_2[i-2,j]  =      b * (price_2[i-2,j] - price_2[i-3,j]) + rnorm(1, mean=0, sd=0.05)
    print("1 OK")
    demandFundamentalist_1[i-2,j] =     c * (F1 - price_1[i-2,j]) + rnorm(1, mean=0, sd=0.01)

    demandFundamentalist_2[i-2,j] =     c * (F2 - price_2[i-2,j]) + rnorm(1, mean=0, sd=0.01)

    fitnessTradingChartist_Ac_1[i,j] =     (exp(price_1[i,j]) - exp(price_1[i-1,j])) * demandChartist_1[i-2,j] + 
      d * fitnessTradingChartist_Ac_1[i-1,j]

    fitnessTradingChartist_Ac_2[i,j] =     (exp(price_2[i,j]) - exp(price_2[i-1,j])) * demandChartist_2[i-2,j] + 
      d * fitnessTradingChartist_Ac_2[i-1,j]

    fitnessTradingFundamentalist_Af_1[i,j] =     (exp(price_1[i,j]) - exp(price_1[i-1,j])) * demandFundamentalist_1[i-2,j] + 
      d * fitnessTradingChartist_Ac_1[i-1,j]  

    fitnessTradingFundamentalist_Af_2[i,j] =     (exp(price_2[i,j]) - exp(price_2[i-1,j])) * demandFundamentalist_2[i-2,j] + 
      d * fitnessTradingChartist_Ac_2[i-1,j]  

    percentCT_Wc_1[i,j] =     exp(e * fitnessTradingChartist_Ac_1[i,j]) / 
      (exp(e * fitnessTradingChartist_Ac_1[i,j]) + 
         exp(e * fitnessTradingFundamentalist_Af_1[i,j]) + 
         exp(e * fitnessTradingChartist_Ac_2[i,j]) + 
         exp(e * fitnessTradingFundamentalist_Af_2[i,j]) +
         exp(0)
      )

    percentCT_Wc_2[i,j] = 
      exp(e * fitnessTradingChartist_Ac_2[i,j]) / 
      (exp(e * fitnessTradingChartist_Ac_1[i,j]) + 
         exp(e * fitnessTradingFundamentalist_Af_1[i,j]) +
         exp(e * fitnessTradingChartist_Ac_2[i,j]) + 
         exp(e * fitnessTradingFundamentalist_Af_2[i,j]) + 
         exp(0)
      )

    percentFT_Wf_1[i,j] = 
      exp(e * fitnessTradingFundamentalist_Af_1[i,j]) / 
      (exp(e * fitnessTradingChartist_Ac_1[i,j]) + 
         exp(e * fitnessTradingFundamentalist_Af_1[i,j]) +
         exp(e * fitnessTradingChartist_Ac_2[i,j]) + 
         exp(e * fitnessTradingFundamentalist_Af_2[i,j]) + 
         exp(0)
      )

    percentFT_Wf_2[i,j] = 
      exp(e * fitnessTradingFundamentalist_Af_2[i,j]) / 
      (exp(e * fitnessTradingChartist_Ac_1[i,j]) + 
         exp(e * fitnessTradingFundamentalist_Af_1[i,j]) +
         exp(e * fitnessTradingChartist_Ac_2[i,j]) + 
         exp(e * fitnessTradingFundamentalist_Af_2[i,j]) + 
         exp(0)
      )

    percentNoTrading[i,j] = 
      1- percentCT_Wc_1[i,j] - percentFT_Wf_1[i,j] - percentCT_Wc_2[i,j] - percentFT_Wf_2[i,j]

    price_1[i,j] = 
      price_1[i-1,j] + 
      a * ((percentCT_Wc_1[i-1,j] * demandChartist_1[i-1,j] + 
              percentFT_Wf_1[i-1,j] * demandFundamentalist_1[i-1,j]
      )
      ) + 
      rnorm(1, mean=0, sd=0.01)

    price_2[i,j] = 
      price_2[i-1,j] + 
      a * ((percentCT_Wc_2[i-1,j] * demandChartist_2[i-1,j] + 
              percentFT_Wf_2[i-1,j] * demandFundamentalist_2[i-1,j]
      )
      ) + 
      rnorm(1, mean=0, sd=0.01)
  }
}

希望這是您正在尋找的。 可能有更簡單的方法,但你的代碼結構首先需要一些優化。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM