【问题标题】:Storing lists with different values inside a for loop R在for循环R中存储具有不同值的列表
【发布时间】:2019-11-27 09:29:06
【问题描述】:

我有一个清单

list1 <- list()

还有两个序列

seq1 <- seq(10, 1000, by  = 10)
seq2 <- seq(2, 10, by = 10)

我想循环两个序列,例如

for(i in seq1){
  for(j in seq2){
    ########
    # code #
    ########
   }
}

这样使用 seq1 和 seq2 的不同组合创建不同的列表。 我需要一个包含多个列表的列表,其中包含不同的组合,例如

list1 有多个具有不同 seq1 和 seq2 组合的列表((10,2), (10,4)...)

【问题讨论】:

  • 您需要更好地指定您期望的输出类型。您是否尝试过嵌套 lapplys?类似于:`lapply(seq1, function(x1) lapply(seq2, function(x2, x1) ##your code##))

标签: r list for-loop


【解决方案1】:

有更有效的方法可以实现您的目标,但如果您更喜欢通过for-loop 来实现,那么您可以尝试

for(i in seq1){
  for(j in seq2){
    list1[[length(list1)+1]] <- c(i,j)
  }
}

这样

> head(list1)
[[1]]
[1] 10  2

[[2]]
[1] 20  2

[[3]]
[1] 30  2

[[4]]
[1] 40  2

[[5]]
[1] 50  2

[[6]]
[1] 60  2

【讨论】:

  • @user9445536 我认为您添加变量的方式不适用于我的解决方案列表,它们绝对是不同类型的列表......但如果你愿意,你应该使用@ 987654324@ 之类的
  • @user9445536 expand.grid 的结果是一个数据框,根据位置分配值要容易得多
  • @Clemsang 我猜 OP 只是想创建嵌套列表....不确定最终目标
【解决方案2】:

您可以使用expand.grid 来组合两个向量:

expand.grid(seq1, seq2)

拥有组合列表:

list1 <- expand.grid(seq1, seq2)
split(list1, seq(nrow(list1)))

要删除列的名称,请改用:

split(as.matrix(list1), row(list1))

【讨论】:

  • 感谢帮助,创建的列表调用了列表变量 Var1(用于 seq1)和 Var2(用于 seq2),我该如何选择我希望它们被调用的名称?
  • @user9445536 colnames(list1) &lt;- c("label1", "label2") 在拆分之前。
  • 谢谢,有没有办法调用每个列表,例如for (i in length(list1)) { list1$i[1] }
  • 使用for (i in 1:length(list1)) { list1[[i]][1]}
  • 如果我想用不同的列表作为参数调用一个函数,我应该怎么做,例如对于我调用的每个组合 `function(x, y) `,其中 y 是不同的列表
猜你喜欢
  • 1970-01-01
  • 2016-08-21
  • 2021-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-07
相关资源
最近更新 更多