【问题标题】:Use purrr on a position of element in nested list?在嵌套列表中的元素位置上使用 purrr?
【发布时间】:2019-09-30 22:21:24
【问题描述】:

情况:我在下图中有一个嵌套列表。我想使用 purrr 遍历每个嵌套列表的第二个元素并应用日期转换函数。

问题:我可以轻松地编写一个 for 循环来迭代它,但我想将它与 purrr 一起使用。我的嵌套列表尝试没有成功。普通列表很好,按位置嵌套,不好。

来自 Maurits Evers 的可重现示例代码(谢谢!)

lst <- list(
    list("one", "12345", "2019-01-01"),
    list("two", "67890", "2019-01-02"))

感谢任何帮助!

【问题讨论】:

标签: r tidyverse purrr


【解决方案1】:

请参阅上面的评论以了解如何提供可重现的示例,包括示例数据。

由于您不提供示例数据,让我们创建一些类似于屏幕截图中显示的最小模拟数据。

lst <- list(
    list("one", "12345", "2019-01-01"),
    list("two", "67890", "2019-01-02"))

要转换每个list 元素as.Date 的第三个元素,我们可以这样做

lst <- map(lst, ~{.x[[3]] <- as.Date(.x[[3]]); .x})

我们可以确认每个list元素的第三个元素都是Date类型的对象

str(lst)
#List of 2
# $ :List of 3
#  ..$ : chr "one"
#  ..$ : chr "12345"
#  ..$ : Date[1:1], format: "2019-01-01"
# $ :List of 3
#  ..$ : chr "two"
#  ..$ : chr "67890"
#  ..$ : Date[1:1], format: "2019-01-02"

更新

更多purrr/tidyverse-canonical 方法是使用modify_at(感谢@H1)

lst <- map(lst, ~modify_at(.x, 3, as.Date))

结果和之前一样。

【讨论】:

  • modify_at 在这里效果很好 - map(lst, ~modify_at(.x, 3, as.Date))
  • @H1 啊,是的,我也遇到过:-) 不错
  • @H1 - 就是这个!
  • A plyr 版本:plyr::llply(lst,function(x) {x[[3]]&lt;- as.Date(x[[3]]);x})
  • 感谢毛里塔和 H1。我将阅读所发布文章背后的功能以了解更多信息。
猜你喜欢
  • 2021-12-13
  • 2020-01-25
  • 2021-01-13
  • 1970-01-01
  • 1970-01-01
  • 2016-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多