Можно измерить массив после того, как мы заполним его (в одномерном, векторном, модном)
Эмулируя одномерный фрагмент вопроса, вот как это может бытьсделано с более высокими размерами.
> x=c()
> tmp=c(1,2)
> n=6
> for (i in seq(1, by=2, length=n)) x[i:(i+1)] =tmp;
> dim(x) = c(2,n)
> x
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 1 1 1 1 1
[2,] 2 2 2 2 2 2
>
Вместо использования i:(i+1)
в качестве индекса, может быть предпочтительнее использовать seq(i, length=2)
или еще лучше, seq(i, length=length(tmp))
для более общего подхода, как показано ниже (дляпример массива 4 x 7)
> x=c()
> tmp=c(1,2,3,4)
> n=7
> for (i in seq(1, by=length(tmp), length=n))
x[seq(i, length=length(tmp))] = tmp;
> dim(x) = c(length(tmp),n)
> x
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 1 1 1 1 1 1 1
[2,] 2 2 2 2 2 2 2
[3,] 3 3 3 3 3 3 3
[4,] 4 4 4 4 4 4 4
>
Мы также можем получить аналогичный результат, переназначив x с помощью cbind / rbind, следующим образом.
> tmp=c(1,2)
> n=6
> x=rbind(tmp)
> for (i in 1:n) x=rbind(x, tmp);
> x
[,1] [,2]
tmp 1 2
tmp 1 2
tmp 1 2
tmp 1 2
tmp 1 2
tmp 1 2
tmp 1 2
Примечание: можно получитьизбавиться от имен "tmp" (это побочный эффект rbind), с
> dimnames(x)=NULL