Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 柔性阵列子集划分_Arrays_R - Fatal编程技术网

Arrays 柔性阵列子集划分

Arrays 柔性阵列子集划分,arrays,r,Arrays,R,我想编写一个函数,将具有可变维数的数组X作为输入(例如,dim(X)=>c(2,3),或dim(X)=>c(2,3,5)),以及维数索引列表和数字索引。函数根据指定的维度和索引返回数组的子集。例如: dim(B) => c(2,5,10) FUN(B, list(list(2,1:3), list(3,6:10))) => B[, 1:3, 6:10] 挑战来自于这样一个事实,即B的尺寸没有事先指定。我能想到的最佳解决方案是生成一个字符串s,这是。一般策略是为所有维度生成索引列表,

我想编写一个函数,将具有可变维数的数组X作为输入(例如,
dim(X)=>c(2,3)
,或
dim(X)=>c(2,3,5)
),以及维数索引列表和数字索引。函数根据指定的维度和索引返回数组的子集。例如:

dim(B) => c(2,5,10)
FUN(B, list(list(2,1:3), list(3,6:10))) => B[, 1:3, 6:10]
挑战来自于这样一个事实,即B的尺寸没有事先指定。我能想到的最佳解决方案是生成一个字符串
s,这是。一般策略是为所有维度生成索引列表,其中非指定维度由单个
TRUE
表示,然后允许您使用
do调用
[
。调用

sub_arr <- function(X, lst) {
  dim.list <- as.list(rep(T, length(dim(X))))
  dim.list[vapply(lst, `[[`, 1, 1)] <- lapply(lst, `[[`, 2)
  do.call(`[`, c(list(X), dim.list))
}
B <- array(1:16, dim=rep(2, 4))
sub_arr(B, list(list(2, 1:2), list(3, 1)))
以及:


我不确定我是否理解。我想你的意思如下所示:如果我有
数组(1:27,c(3,3,3))
,那么提供它和向量
c(2,2,2)
应该给我相应的项(在本例中为14),但对于任意数量的维度?
, , 1
     [,1] [,2]
[1,]    1    3
[2,]    2    4
, , 2
     [,1] [,2]
[1,]    9   11
[2,]   10   12    
identical(
  B[, 1:2, 1, ],
  sub_arr(B, list(list(2, 1:2), list(3, 1)))
)
# [1] TRUE