Переменная в цикле хранит только первые данные процесса - PullRequest
0 голосов
/ 27 февраля 2020

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

k=1
l=1

E <- c()
sigma_es <- c() 

while (k <= 170) {
  Es <- c()
    while(l <= 720){
      E <- (obs[[1]][l]-tab[[1]][2*k-1]-(tab[[1]][2*k]*era5[l,k]))^2
      Es <- c(Es,E)
      hold <- sum(Es)
      print(paste("l= ",l,"dan k= ",k," akumulasi error=",hold))
      l=l+1
    }
  sigma_es <- c(sigma_es,hold)
  k=k+1
}

Я пытался использовать фреймы данных и матрицу, но результаты все еще не могут сохранить все результаты. Пожалуйста, помогите мне решить эту проблему

вот пример данных, которые я использую:

данные obs

structure(list(Temp = c(20.6, 23.2, 25, 27.4, 28.8, 29.2, 30, 
29.4, 29.4, 29.2, 28, 26.6, 26.2, 20, 22.4, 25.2, 27, 29, 29.6, 
29.4)), class = c("tbl_df", "tbl", "data.frame"), row.names = c(NA, 
-20L))

данные вкладки

structure(list(Estimate = c(21.8622017063543, 0.149905976990255, 
21.8792372021679, 0.149106548969244, 22.483179270103, 0.125959278859866, 
23.0223290054929, 0.105312788847492, 22.7764521125954, 0.114936945277311
), `Std. Error` = c(2.37994644400538, 0.0916220989468571, 2.63859044098663, 
0.101496001085481, 2.67417945176719, 0.102946780235079, 2.71999289764186, 
0.104833205410304, 2.8011149786195, 0.108097071239478), `t value` = c(9.1860057445498, 
1.63613340791509, 8.29201715518484, 1.46908791848523, 8.40750580715343, 
1.22353781800886, 8.46411364730125, 1.00457472835359, 8.13120928146282, 
1.06327529469027), `Pr(>|t|)` = c(4.30028996897647e-19, 0.102249907076108, 
5.47881708292241e-16, 0.142246934658274, 2.2472335679596e-16, 
0.221528011106171, 1.44672121858366e-16, 0.315440097658094, 1.86410772248374e-15, 
0.288014595967456)), row.names = c("(Intercept)", "2 _uji", "(Intercept)1", 
"3 _uji", "(Intercept)2", "4 _uji", "(Intercept)3", "5 _uji", 
"(Intercept)4", "6 _uji"), class = "data.frame")

данные эры5

structure(c(25.5656043, 25.69174497, 26.19046783, 26.95023182, 
27.60604654, 28.1500282, 28.39544774, 28.46275197, 28.1386405, 
28.0857899, 26.1006802, 26.24988827, 26.53224483, 26.87635776, 
27.19273143, 27.47435801, 27.64108561, 27.74561886, 27.75525461, 
27.81204711, 26.58786936, 26.68043093, 26.81343342, 26.98147499, 
27.12002534, 27.27697121, 27.40281989, 27.51976281, 27.66225506, 
27.76474436), .Dim = c(10L, 3L), .Dimnames = list(c("1", "2", 
"3", "4", "5", "6", "7", "8", "9", "10"), NULL))

и вот я получил вывод:

    c(4385.62165935493, 4385.62165935493, 4385.62165935493, 4385.62165935493, 
4385.62165935493, 4385.62165935493, 4385.62165935493, 4385.62165935493, 
4385.62165935493, 4385.62165935493)

но я хочу получить вывод, подобный этому:

c(4385.621659, 4388.780521, 4392.813546
)

1 Ответ

0 голосов
/ 27 февраля 2020

Я думаю, что после 1-й итерации while l oop вам нужно снова инициализировать l, поскольку она все еще находится на последнем вычисленном значении и не go внутри while l oop.

k=1
E <- c()
sigma_es <- c() 

while (k <= 170) {
   Es <- c()
   l = 1 #<- Initializing here
   while(l <= 720){
      E <- (obs[[1]][l]-tab[[1]][2*k-1]-(tab[[1]][2*k]*era5[l,k]))^2
      Es <- c(Es,E)
      hold <- sum(Es)
      print(paste("l= ",l,"dan k= ",k," akumulasi error=",hold))
      l=l+1
   }
  sigma_es <- c(sigma_es,hold)
  k=k+1
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...