【问题标题】:why exist a difference between appending lists and vectors?为什么附加列表和向量之间存在差异?
【发布时间】:2019-11-24 22:35:14
【问题描述】:

我的问题是为什么下面的代码

list1 <- list()
list1[[1]] <- c()
list1[[1]] <- c(list1[[1]], 7)

显示错误

list1[[1]] 中的错误:下标超出范围

以及为什么下面的代码

vector1 <- c()
vector1 <- c(vector1, 7)

有效吗?我想做这样的事情

for (i in c(1,2,3)){
  for (j in c(1,2,3)){
    list1[[i]].append(list3[[i]], j)
  }
}

【问题讨论】:

  • 一个选项是list1 &lt;- vector('list', 1)
  • 这个问题不是很清楚。无论如何,列表和向量都没有针对追加进行优化。那是 R 中的 O(n) 操作,它通过附加二次复杂度来生成构建列表/向量的循环。预分配要好得多。
  • akrun 和 John Coleman 感谢 cmets。

标签: r list vector


【解决方案1】:

您是否正在寻找类似的东西?

使用 for 循环 您可以通过执行以下操作将数字附加到列表的每个向量:

list1 = vector("list",3)
for(i in 1:3)
{
  for(j in 1:3)
  {
    list1[[i]] = c(list1[[i]],j)
  }
}

你会得到以下输出:

> list1
[[1]]
[1] 1 2 3

[[2]]
[1] 1 2 3

[[3]]
[1] 1 2 3

使用 lapply

您可以做同样的事情而无需使用for 循环,而是使用lapply

list3 = vector("list",3)
list3 = lapply(list3,function(x){1:3})

你会得到类似的输出

【讨论】:

    猜你喜欢
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多