Значение индексации в цикле for в R - PullRequest
0 голосов
/ 23 октября 2019

Я видел цикл в демонстрационном коде:

b <- 3
n <- 4

set.seed(1)

(i <- sample(rep(1:n, 
                 b)) )      
(g <- rep(1:b, 
          each=n) )      

(x <- rnorm(n) )           

m  <- rep(NA, max(g))      

for (j in 1:max(g) ) {      
  k    <- i[ g == j ]     
  m[j] <- mean(x[k])      
  print (j)
  print (k)
}   

Макс (г) = 3, поэтому цикл запускается 3 раза. но я не понимаю второй ряд цикла k <- i[ g == j ]. Какой смысл здесь? Спасибо!

1 Ответ

2 голосов
/ 23 октября 2019

i - это вектор (созданный sample(rep(1:n, b))).

i[<something>] индексирует элементы i, для которых <something> оценивается как TRUE (в данном случае, когда g равно j).

g - это другой вектор (созданный rep(1:b, each=n)).

Итак,

k <- i[ g == j ]

создает для каждого значенияj в качестве цикла for (эти значения 1:max(g)), вектор k, который является подмножеством i, для которого выполняется условие g == j.

...