51

在循环中扩展数据结构在 R 中是低效的。如何预分配list一定大小的 a?通过and参数matrix使这变得容易。如何在列表中做到这一点?例如:ncolnrow

x <- list()
for (i in 1:10) {
    x[[i]] <- i
}

我认为这是低效的。有什么更好的方法来做到这一点?

4

4 回答 4

82

vector可以创建所需模式和长度的空向量。

x <- vector(mode = "list", length = 10)
于 2012-09-17T17:37:00.663 回答
25

为了扩展@Jilber 所说的内容,lapply它是专门为这种类型的操作而构建的。

而不是 for 循环,您可以使用:

x <- lapply(1:10, function(i) i)

您可以将其扩展到更复杂的示例。通常,for 循环体中的内容可以直接转换为一个函数,该函数接受单个行,该行看起来像循环的每次迭代中的一行。

于 2012-09-17T17:51:45.257 回答
6

像这样的东西:

   x <- vector('list', 10)

但是使用 lapply 是最好的选择

于 2012-09-17T17:37:43.603 回答
0

所有 3 个现有答案都很棒。

JennyBC 的 purrr 教程中解释了该vector()函数可以创建列表的原因:

列表实际上仍然是 R 中的向量,但它不是原子向量。我们使用 list() 显式构造一个列表,但是,就像原子向量一样,大多数列表在现实生活中都是以其他方式创建的。

预分配列表

list <- vector(mode = "list", length = 10)

预分配向量

vec <- rep(NA, 10)
于 2022-01-05T23:08:19.457 回答