Одним из основных преимуществ функций более высокого порядка, таких как lapply()
или sapply()
, является то, что вам не нужно инициализировать ваш «контейнер» (в этом случае матрица).
Как Fojtasek предлагает:
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
См this post о <<-
. Но в данном конкретном примере для контура будет просто сделать больше смысла:
mat <- matrix(0,nrow=10,ncol=1)
for(i in 1:10) mat[i,] <- rnorm(1,mean=i)
с незначительной стоимостью создания переменной индексации, i
в глобальном рабочем пространстве.