如何解决使用$ p $逗号的子数组
说我有一个大小为(n x m_1 x m_2 x m_3)的数组Y。如果我想要第一个大小为(m_1 x m_2 x m_3)的子数组,可以使用逗号选择
Y(1,)
类似地,如果Y的大小为(nx m_1 x m_2 x m_3 x m_4),并且我想要第一个大小为(m_1 x m_2 x m_3 x m_4)的子数组,则可以使用逗号作为
Y(1,)
通常,如果Y是一个大小为(nx m_1 x m_2 x ... x m_p)的数组,而我想要第一个大小为(m_1 x m_2 x ... x m_p)的子数组,则可以选择
Y(1,...,)
其中,,...,表示p个不同的逗号。如果知道p,我该怎么写p逗号?
一个简单的解决方案是
array(array(Y,c(dim(Y)[1],prod(dim(Y)[-1])))[1,])
但是,这是效率低下的代码(Y可能很大,我不希望先将其转换为矩阵然后再转换回数组)
解决方法
您始终可以将表达式构建为文本,然后对其求值。在您的情况下,可以使用strrep(",",p)
重复“,” p次,然后使用str2expression()
将其转换为可以求值的表达式。如果您将其放在函数中:
slice_first_dimension <- function(arr){
p <- length(dim(Y))
eval(str2expression(paste0("arr[1",strrep(",p-1),"]")))
}
Y <- array(1:8,dim=c(2,2,2))
slice_first_dimension(Y)
#> [,1] [,2]
#> [1,] 1 5
#> [2,] 3 7
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。