【发布时间】:2013-07-19 17:13:15
【问题描述】:
在这个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,以便稍后在需要时填写?
【问题讨论】:
-
令人讨厌的是,
alist()不会创建长度为 1 的列表,但alist(,)会创建长度为 2 的列表...... -
如果@JoshuaUlrich 或@JoshO'Brien 想要发布
rep(list(bquote()), n)成语作为答案,我倾向于接受alist实际上不是这样的,它是@ 987654340@,这也是它产生的。如果您不想,我会将其发布为答案。 -
@GavinSimpson -- 完成。当我有更多时间时,我可能会进一步使用指向各种 R-devel 线程和解决该主题的 SO 问题的链接来填充它,因为它有点有趣并且大多没有记录。 (或者,其他任何人,请随时将这些添加到我的答案中。)
标签: r