R 填充三维阵列的有效方法

R 填充三维阵列的有效方法,r,multidimensional-array,R,Multidimensional Array,我正试图找到一种有效的方法来填充3D阵列。特别是,我想用前面列的值填充数组的列 这是一个可复制的例子 set.seed(1234) no_ind <- 10 time_period <- 8 ## Define the 3D array col_array <- c(paste("day_", seq(0, 7, 1), sep="")) test <- array(0, dim=c(time_period, length(col_array), no_ind), di

我正试图找到一种有效的方法来填充3D阵列。特别是,我想用前面列的值填充数组的列

这是一个可复制的例子

set.seed(1234)
no_ind <- 10
time_period <- 8

## Define the 3D array
col_array <- c(paste("day_", seq(0, 7, 1), sep=""))
test <- array(0, dim=c(time_period, length(col_array), no_ind), dimnames=list(NULL, col_array, as.character(seq(1, no_ind, 1))))
print(test)

## Initialize the array
test[1,c("day_0"),] <- round(runif(no_ind, 0, 100))
print(test)

## Fill the array
for(time in 1:(time_period - 1)){
for(ind in 1:no_ind){
  ## print(time)
  ## print(ind)
    test[time + 1,c("day_0"),ind] <- round(runif(1, 0, 100))
    test[time + 1,c("day_1"),ind] <- test[time,c("day_0"),ind]
    test[time + 1,c("day_2"),ind] <- test[time,c("day_1"),ind]
    test[time + 1,c("day_3"),ind] <- test[time,c("day_2"),ind]
    test[time + 1,c("day_4"),ind] <- test[time,c("day_3"),ind]
    test[time + 1,c("day_5"),ind] <- test[time,c("day_4"),ind]
    test[time + 1,c("day_6"),ind] <- test[time,c("day_5"),ind]
    test[time + 1,c("day_7"),ind] <- test[time,c("day_6"),ind]
  }
}

print(test)
set.seed(1234)

无需使用
sapply
s implicit(默认情况下)
simplify=TRUE
参数,并使用
replicate

dims <- c(8, 8, 10)   # The dimensions of your array
set.seed(2017)
arr <- replicate(dims[3], {
    rand <- round(runif(dims[1], 0, 100));
    sapply(seq_along(1:dims[1]), function(i)
        c(rep(0, i - 1), rand[1:(dims[1] - i + 1)])) })

太棒了!非常感谢你的帮助。如果我在“时间”上保持第一个循环,我怎么能在第三维度“ind”上简化第二个循环?@Pierre对不起,我不理解你的问题。我以为目标是优化你的代码?我的代码生成与您的示例相同的输出结构。是的,目标是优化代码,但我想知道是否可以通过保持循环
for(ind in 1:no_ind)
for(time in 1:(time_period-1))
固定来优化循环
中的代码。因此,在这种情况下,代码结构将是:
for(time in 1:(time_period-1)){***优化代码***}