我有一个array
,可以有一个或多个页面或工作表(我的名字是第三个维度)。我正在尝试对array
执行操作。当只有一个工作表或页面时,操作结果为matrix
。我希望结果是array
。即使操作结果只有1页或页面,有没有办法保留类array
?
这是一个例子。我希望my.var.2
和my.var.3
为array
。这里变量my.pages
设置为1
,这似乎导致了问题。但是,my.pages
可以是>1
。如果my.pages <- 2
则my.var.2
和my.var.3
为array
。
set.seed(1234)
my.rows <- 10
my.columns <- 4
my.pages <- 1
my.var.1 <- array( rnorm((my.rows*my.columns*my.pages), 10, 2),
c(my.rows,my.columns,my.pages))
my.var.1
my.var.2 <- 2 * my.var.1[,-my.columns,]
my.var.3 <- 10 * my.var.1[,-1,]
class(my.var.2)
class(my.var.3)
my.var.2 <- as.array(my.var.2)
my.var.3 <- as.array(my.var.3)
class(my.var.2)
class(my.var.3)
my.var.2 <- as.array( 2 * my.var.1[,-my.columns,])
my.var.3 <- as.array(10 * my.var.1[,-1,] )
class(my.var.2)
class(my.var.3)
当我尝试在嵌套matrix
中使用my.var.1
和my.var.2
时,切换到for-loop
会导致问题。
以下if
声明似乎解决了这个问题,但似乎也有点笨拙。有更优雅的解决方案吗?
if(my.pages == 1) {my.var.2 <- array(my.var.2, c(my.rows,(my.columns-1),my.pages))}
答案 0 :(得分:1)
来自help([)
:
Usage:
x[i, j, ... , drop = TRUE]
...
drop: For matrices and arrays. If 'TRUE' the result is coerced to
the lowest possible dimension (see the examples). This only
works for extracting elements, not for the replacement. See
'drop' for further details.
您的代码,重新访问:
set.seed(1234)
my.rows <- 10
my.columns <- 4
my.pages <- 1
my.var.1 <- array( rnorm((my.rows*my.columns*my.pages), 10, 2),
c(my.rows,my.columns,my.pages))
my.var.2 <- 2 * my.var.1[,-my.columns,,drop=FALSE]
my.var.3 <- 10 * my.var.1[,-1,,drop=FALSE]
class(my.var.2)
## [1] "array"
class(my.var.3)
## [1] "array"