【问题标题】:How to access all lists within lists with a loop如何使用循环访问列表中的所有列表
【发布时间】:2016-12-22 18:41:18
【问题描述】:

这是来自 one 的后续问题,我想在列表中创建一个列表,现在我希望能够访问嵌套列表并在其中执行函数。

我有一个 3 个列表,其中包含两个列表:

    my_list

    structure(list(a = structure(list(a = structure(list(value = c(1L, 
4L), class = structure(c(1L, 1L), .Label = c("a", "b", "c"), class = "factor")), .Names = c("value", 
"class"), row.names = c(1L, 4L), class = "data.frame"), b = structure(list(
    value = c(2, 1), class = structure(c(2L, 2L), .Label = c("a", 
    "b", "c"), class = "factor")), .Names = c("value", "class"
), row.names = c(2L, 5L), class = "data.frame")), .Names = c("a", 
"b")), b = structure(list(a = structure(list(value = c(6, 1), 
    class = structure(c(1L, 1L), .Label = c("a", "b", "c", "d"
    ), class = "factor")), .Names = c("value", "class"), row.names = c(1L, 
5L), class = "data.frame"), b = structure(list(value = c(5, 1
), class = structure(c(2L, 2L), .Label = c("a", "b", "c", "d"
), class = "factor")), .Names = c("value", "class"), row.names = c(2L, 
6L), class = "data.frame")), .Names = c("a", "b")), c = structure(list(
    a = structure(list(value = 5:6, class = structure(c(1L, 1L
    ), .Label = c("a", "b", "c", "d", "e"), class = "factor")), .Names = c("value", 
    "class"), row.names = 5:6, class = "data.frame"), b = structure(list(
        value = c(4, 1), class = structure(c(2L, 2L), .Label = c("a", 
        "b", "c", "d", "e"), class = "factor")), .Names = c("value", 
    "class"), row.names = c(4L, 7L), class = "data.frame")), .Names = c("a", 
"b"))), .Names = c("a", "b", "c"))

    $a
    $a$a
      value class
        1     a
        4     a

    $a$b
      value class
       2     b
       1     b


    $b
    $b$a
      value class
        6     a
        1     a

    $b$b
      value class
        5     b
        1     b


    $c
    $c$a
      value class
        5     a
        6     a

    $c$b
      value class
        4     b
        1     b

我想通过value != 1 subset 每个嵌套列表使用循环,以便生成的列表如下所示:

my_list
$a
        $a$a
          value class
            4     a

        $a$b
          value class
           2     b



        $b
        $b$a
          value class
            6     a


        $b$b
          value class
            5     b



        $c
        $c$a
          value class
            5     a
            6     a

        $c$b
          value class
            4     b

使用下面的代码,我只能访问list [[1]][[1]]list[[2]][[2]]list[[3]][[3]]。如何通过循环访问其他人并应用subset 函数?

for (i in 1:length(my_list)) {
  my_list[[i]][[i]] <- subset(my_list[[i]][[i]],my_list[[i]][[i]]$value=1) 
 }

【问题讨论】:

标签: r list indexing subset


【解决方案1】:

对于那些想知道如何为这个问题做一个嵌套循环的人——我得到了帮助来解决这个问题:

for (i in 1:length(my_list)) {
  for (j in 1:2) {
  my_list[[i]][[j]] <- subset(my_list[[i]][[j]],my_list[[i]][[j]]$value!=1) 
  }
}

【讨论】:

  • subset内,你可以使用value !=1,即my_list[[i]][[j]] &lt;- subset(my_list[[i]][[j]], value != 1)
【解决方案2】:

我们可以使用嵌套的lapplyrapply

lapply(my_list, function(x) lapply(x, function(y) subset(y, value!=1)))
#$a
#$a$a
#  value class
#4     4     a

#$a$b
#  value class
#2     2     b


#$b
#$b$a
#  value class
#1     6     a

#$b$b
#  value class
#2     5     b


#$c
#$c$a
#  value class
#5     5     a
#6     6     a

#$c$b
#  value class
#4     4     b

【讨论】:

  • 我真的应该学习如何使用 lapply。难道不能用循环来做吗?
  • @Bonono 您有一个嵌套循环,一种方法是通过循环遍历嵌套循环或将其转换为单个数据集,过滤“值”,然后再次重新转换回嵌套形式(这是不必要的复杂)
  • 我同意,你这样说听起来很荒谬。感谢您对 akrun 的帮助,您一如既往地出色。我一定会在我的博士学位期间承认你!
  • @Bonono 谢谢你的好话
  • 应得的赞美。尽管我喜欢学习,但我想知道如何能够遍历嵌套循环。我想我需要对它进行双重循环,以便我可以访问 list [[1]][[2]]list[[2]][[1]]
猜你喜欢
  • 2017-01-19
  • 1970-01-01
  • 2012-08-07
  • 2017-11-06
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 2016-09-04
  • 1970-01-01
相关资源
最近更新 更多