如何操作大型数组 R

How to manipulate large arrays R

我有一个尺寸为 data[1:10,1:50,1:1000] 的大数组。我想用尺寸为 new_data[1,1:50,1:1000].

的新数据换出所有矩阵的第 5 行

到目前为止,我已经尝试将数组拆开并重新组合起来:

data1<-data[1:4,1:50,1:1000]
data2<-data[6:10,1:50,1:1000]

combined_data<-rbind(data1,new_data,data2) 

但是 rbind 在这里似乎不合适 returns 一个大矩阵而不是一个大数组 dimensions[1:10,1:50,1:1000]

这里有一个简单的例子:

vec1<-1:4
vec2<-c(1,2,2,4,1,2,2,4)
data_array<-array(c(vec1,vec2),dim=c(4,3,10))
data_array[,,1] # visualizing one of the 10 matrix - say they error is in row 3 where we would expect all 3s  


new_data<-array(c(3,3,3),dim=c(1,3,10))
new_data[,,1] # correct data that we want to swap into row 3 of all the matrices 

array2<-data_array[1:2,,] #correct data from original array 
array3<-array(data_array[4,,],dim=c(1,3,10)) #correct data from original array

combined_data <- rbind(array2,new_data,array3) # attempting to combine and new_data into the correct row 

然而,这会产生尺寸为 [1:3,1:60] 的数据,我的目标是与原始 data_array 尺寸完全相同([1:4,1:3 ,1:10]) 但是 new_data 在每个矩阵的第 3 行交换

尝试使用“abind”包中的 abind。

library(abind)
array4 <- abind(array2,new_data,along=1) 
final_data <- abind(array4,array3,along=1)

参考如下:

http://math.furman.edu/~dcs/courses/math47/R/library/abind/html/abind.html

由于数组实际上只是一个具有维度的向量,您可以从第三个值(您要替换的行)开始,每隔 4 个值(每层中的行数)替换为 new_data

data_array[seq(3, by=dim(data_array)[1], to=length(data_array))] <- new_data
data_array

#, , 1
#
#     [,1] [,2] [,3]
#[1,]    1    1    1
#[2,]    2    2    2
#[3,]    3    3    3
#[4,]    4    4    4
#
#, , 2
#
#     [,1] [,2] [,3]
#[1,]    1    1    1
#[2,]    2    2    2
#[3,]    3    3    3
#[4,]    4    4    4
#...