在这个Answer中,alist()
提出了一种创建包含空元素的列表的简单方法。一个用例是构建一个适合调用[
排列的列表的列表 via do.call()
。例如:
x <- matrix(1:6, ncol = 2)
do.call(`[`, alist(x, , 2)) ## extract column 2 of x
[1] 4 5 6
提示答案的特定问题alist()
需要根据对象动态设置空参数shortdim
。
如果一个人知道存在多少个维度,那么他可以做到
al <- alist( , , ) ## 3 arguments for a 2-d object
al[[1]] <- x
shortdim <- 1
al[[shortdim + 1]] <- 1:2 ## elements 1 & 2 of dim shortdim, plus all other dims
do.call(`[`, al)
> do.call(`[`, al)
[,1] [,2]
[1,] 1 4
[2,] 2 5
> x[1:2, ] ## equivalent too
[,1] [,2]
[1,] 1 4
[2,] 2 5
动态长度的列表可以由创建vector()
,例如
ll <- vector(mode = "list", length = length(dim(x)) + 1)
但是alist
不能以这种方式制作
> vector(mode = "alist", length = length(dim(x)) + 1)
Error in vector(mode = "alist", length = length(dim(x)) + 1) :
vector: cannot make a vector of mode 'alist'.
有没有办法创建一个alist
可以在以后需要时填写的动态长度?