【问题标题】:lapply over nested list and retain naming/structure覆盖嵌套列表并保留命名/结构
【发布时间】:2012-11-28 15:15:52
【问题描述】:

在创建嵌套列表时,我认为 R 具有有用的列表元素命名结构。我有一个列表列表,并希望应用任何列表中包含的每个向量的函数。 lapply 执行此操作,但随后剥离列表的命名结构。我如何lapply 嵌套列表的每个向量元素而不剥离名称?我尝试传递索引,但这似乎做同样的事情(条带名称)。

TEST <- list(n1=list(a="5", b="65"), n2=list(a="f", b= "f6"))
TEST
lapply(TEST, function(x) gsub("6", "foo", x))
lapply(seq_along(TEST), function(i) gsub("6", "foo", TEST[[i]]))

控制台输出:

> TEST
$n1
$n1$a
[1] "5"

$n1$b
[1] "65"


$n2
$n2$a
[1] "f"

$n2$b
[1] "f6"


> lapply(TEST, function(x) gsub("6", "foo", x))
$n1
[1] "5"    "foo5"

$n2
[1] "f"    "ffoo"

期望的结果:

$n1
$n1$a
[1] "5"

$n1$b
[1] "foo5"


$n2
$n2$a
[1] "f"

$n2$b
[1] "ffoo"

【问题讨论】:

  • @shujaa 是的,我编辑以反映您的评论

标签: r


【解决方案1】:

您似乎想要 *apply 系列的 rapply 变体

rapply(TEST, function(x){gsub("6", "foo", x)}, how = "list")

$n1
$n1$a
[1] "5"

$n1$b
[1] "foo5"


$n2
$n2$a
[1] "f"

$n2$b
[1] "ffoo"

您也可以这样做以避免编写匿名函数

rapply(TEST, gsub, pattern = "6", replacement = "foo", how = "list")

【讨论】:

  • 哦,我从未玩过的新 R 巫术魔法。谢谢达森。我知道rapply,但不知道如何或为什么使用它。完美。
  • 没有rapply还有其他方法吗?它评估其参数,因此在循环语言对象时没有用。
  • @JanGorecki 听起来你应该打开一个新问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-23
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 2021-06-07
  • 2020-12-06
相关资源
最近更新 更多