簡體   English   中英

R 中的雙循環問題

[英]Double for-loop issues in R

我正在嘗試運行雙循環並運行不同的回歸模型。 (我保存每個回歸的結果並用它來交叉驗證,但這不是我的問題。)

我的代碼如下:


hr <- seq(50)

# testing ranges:
for (j in 1:10) {

  begin <- (25 - j)

  for (k in 1:10) {

  end <- (25 + k)

  # dummies
  z <- as.factor(ifelse(hr>=begin & hr<=end, hr, NA))
  z2 <- ifelse(begin==end, NA, z)  #this is the problematic part

  # regression here.....

  # save results here....

  }
} 

我創建變量開始和結束。 當 hr 在開始和結束之間時,如果不是 NA,則它們會得到值 hr。 這工作正常。 我的問題是下一個喜歡。 如果 begin==end,我希望所有的值都是 NA。 這不起作用。 即使begin~=end,它也會給我一個NA變量。 我究竟做錯了什么?

這是一個沒有循環的選項。 相反,我們expand_grid來獲取 j 和 k 的每個組合。 然后我們計算開始和結束。 最后,我們將您的條件語句映射到嵌套向量上。 結果保存在名為hr的列中,該列是向量列表。 這里的優點是您可以在數據框中map回歸map ,這應該可以節省您的時間和組織。

library(tidyverse)

hr <- seq(50)

output <- expand_grid(j=1:10, k = 1:10) %>%
  mutate(begin = (25 - j),
         end = (25 + k),
         hr = list(hr),
         hr = pmap(list(begin, end, hr), 
                   ~case_when(
                     ..1 == ..2 ~ ..3*NA,
                     ..3>=..1 & ..3<=..2 ~ ..3,
                     T ~ NA_integer_
                   )))

output
#> # A tibble: 100 x 5
#>        j     k begin   end hr        
#>    <int> <int> <dbl> <dbl> <list>    
#>  1     1     1    24    26 <int [50]>
#>  2     1     2    24    27 <int [50]>
#>  3     1     3    24    28 <int [50]>
#>  4     1     4    24    29 <int [50]>
#>  5     1     5    24    30 <int [50]>
#>  6     1     6    24    31 <int [50]>
#>  7     1     7    24    32 <int [50]>
#>  8     1     8    24    33 <int [50]>
#>  9     1     9    24    34 <int [50]>
#> 10     1    10    24    35 <int [50]>
#> # … with 90 more rows


#first 5 vectors to show it worked
output$hr[1:5]
#> [[1]]
#>  [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 24 25
#> [26] 26 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
#> 
#> [[2]]
#>  [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 24 25
#> [26] 26 27 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
#> 
#> [[3]]
#>  [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 24 25
#> [26] 26 27 28 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
#> 
#> [[4]]
#>  [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 24 25
#> [26] 26 27 28 29 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA
#> 
#> [[5]]
#>  [1] NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA 24 25
#> [26] 26 27 28 29 30 NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA NA

暫無
暫無

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

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