在此Answer中,建议使用alist()
作为创建包含空元素的列表的简单方法。一个用例就是构建一个适合通过[
安排的do.call()
调用的列表。例如:
x <- matrix(1:6, ncol = 2)
do.call(`[`, alist(x, , 2)) ## extract column 2 of x
[1] 4 5 6
提示alist()
答案的特定Question需要根据对象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
的动态长度,可以在以后需要时填写?
答案 0 :(得分:15)
list(bquote())
来构建一个包含空符号的单元素列表,并使用rep
来表示所需的长度。
n <- 2
rep(list(bquote()), n)
# [[1]]
#
#
# [[2]]
#
#
作为奖励,以下是创建/访问每个列表元素内容所需的空符号的5种方法的集合:
bquote()
#
substitute()
#
quote(expr= )
#
formals(function(x) {})$x
#
alist(,)[[1]]
#
答案 1 :(得分:4)
感谢Ferdinand Kraft:
# no. of elements in the alist
n <- 5
a <- rep(alist(,)[1], n)