9

在这个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可以在以后需要时填写的动态长度?

4

2 回答 2

16

好的,我会咬的。我可能会使用list(bquote())构建一个包含空符号的元素列表,并将rep其输出到所需的长度。

n <- 2
rep(list(bquote()), n)
# [[1]]
# 
# 
# [[2]]
# 
# 

作为奖励,这里收集了 5 种创建/访问作为每个列表元素内容所需的空符号的方法:

bquote()
# 
substitute()
# 
quote(expr= )
# 
formals(function(x) {})$x
# 
alist(,)[[1]]
# 
于 2013-07-19T21:09:21.250 回答
4

感谢费迪南德·卡夫:

# no. of elements in the alist
n <- 5
a <- rep(alist(,)[1], n)
于 2013-07-19T17:52:07.497 回答