如何使用此值填充数组(对于循环或lapply函数)?

时间:2017-10-31 15:52:25

标签: arrays r for-loop lapply

我有这个值(简化示例):

a  #class numeric
 [1] 1 5 7 6 9

和这个数组:

res.tot <- array(NA,dim=c(2,1,5))

我需要以res.tot的值填充数组a

[[1]]
     [1]
[1] 1
[2] 1

[[2]]
     [1]
[1] 5
[2] 5

...
[[5]]
     [1]
[1] 9
[2] 9
数组res.tot中的

重复a的每个值2次,每个重复的a值占用不同的z维度。 我试着以这种方式使用for循环:

for (i in 1:length(a)){
  res.1 <- data.frame(rep(a[i],2))
  res.tot[,,i] <- res.1
  }

告诉我:

Error in res.tot.1[, , i] <- res.1 : incorrect number of subscripts

如何使用for looplapply功能?

1 个答案:

答案 0 :(得分:1)

这是一个强力解决方案:

> a <- c(1,5,7,6,9)
> res.tot <- array(NA,dim=c(2,1,5))
> for (i in 1:(dim(res.tot)[1])) {
+   for (j in 1:(dim(res.tot)[2])) {
+     for (k in 1:(dim(res.tot)[3])) {
+       res.tot[i,j,k] <- a[k]
+     }
+   }
+ }
> res.tot
, , 1

     [,1]
[1,]    1
[2,]    1

, , 2

     [,1]
[1,]    5
[2,]    5

, , 3

     [,1]
[1,]    7
[2,]    7

, , 4

     [,1]
[1,]    6
[2,]    6

, , 5

     [,1]
[1,]    9
[2,]    9

这是一个单线解决方案:

> res.tot[] <- rep(a,each=2)
> res.tot
, , 1

     [,1]
[1,]    1
[2,]    1

, , 2

     [,1]
[1,]    5
[2,]    5

, , 3

     [,1]
[1,]    7
[2,]    7

, , 4

     [,1]
[1,]    6
[2,]    6

, , 5

     [,1]
[1,]    9
[2,]    9