【问题标题】:Create a variable length `alist()`创建一个可变长度`alist()`
【发布时间】: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 的列表......
  • 相关(并包含答案)Select along one of n dimensions in array
  • 如果@JoshuaUlrich 或@JoshO'Brien 想要发布rep(list(bquote()), n) 成语作为答案,我倾向于接受alist 实际上不是这样的,它是@ 987654340@,这也是它产生的。如果您不想,我会将其发布为答案。
  • @GavinSimpson -- 完成。当我有更多时间时,我可能会进一步使用指向各种 R-devel 线程和解决该主题的 SO 问题的链接来填充它,因为它有点有趣并且大多没有记录。 (或者,其他任何人,请随时将这些添加到我的答案中。)

标签: r


【解决方案1】:

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

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

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

bquote()
# 
substitute()
# 
quote(expr= )
# 
formals(function(x) {})$x
# 
alist(,)[[1]]
# 

【讨论】:

  • 如果使用 rlang,expr() 也可以,例如rep(list(expr()), n)
  • expression(,)[[1]] 也可以。但是我不明白为什么 as.symbol("") 被禁止,因为 is.symbol(bquote()) 是真的,as.character(bquote())""
【解决方案2】:

感谢费迪南德·卡夫:

# no. of elements in the alist
n <- 5
a <- rep(alist(,)[1], n)

【讨论】:

  • 或(如 Joshua Ulrich 所指的参考)rep(list(bquote()), 5)
  • 我相信创建缺失符号的规范方法(这就是您使用 alist(,)[[1]] 所做的)是 quote(expr = )
  • @hadley:你如何确定它(或任何东西,就此而言)是否是规范的?
  • @JoshuaUlrich 这是R。没有规则!
  • @hadley:那么您永远不应该将 R 中的某些内容描述为“规范”,是吗? ;-)
猜你喜欢
  • 2016-12-14
  • 2020-04-16
  • 2016-09-06
  • 2014-05-28
  • 1970-01-01
  • 2012-12-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多