Одним из основных преимуществ функций более высокого порядка, таких как lapply()
или sapply()
, является то, что вам не нужно инициализировать свой «контейнер» (в данном случае матрицу).
Как Фойтасек предлагает:
as.matrix(lapply(1:10,function(i) rnorm(1,mean=i)))
В качестве альтернативы:
do.call(rbind,lapply(1:10,function(i) rnorm(1,mean=i)))
Или просто как числовой вектор:
sapply(1:10,function(i) rnorm(1,mean=i))
Если вы действительно хотите изменить указанную выше переменную области действия вашей анонимной функции (генератор случайных чисел в данном случае), используйте <<-
> mat <- matrix(0,nrow=10,ncol=1)
> invisible(lapply(1:10, function(i) { mat[i,] <<- rnorm(1,mean=i)}))
> mat
[,1]
[1,] 1.6780866
[2,] 0.8591515
[3,] 2.2693493
[4,] 2.6093988
[5,] 6.6216346
[6,] 5.3469690
[7,] 7.3558518
[8,] 8.3354715
[9,] 9.5993111
[10,] 7.7545249
См. этот пост о <<-
. Но в этом конкретном примере цикл for будет иметь больше смысла:
mat <- matrix(0,nrow=10,ncol=1)
for( i in 1:10 ) mat[i,] <- rnorm(1,mean=i)
с незначительными затратами на создание индексной переменной i
в глобальной рабочей области.