在嵌套列表中的元素位置上使用 purrr?

Ang*_*per -3 r purrr tidyverse

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

嵌套列表

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

Maurits Evers 的可复制示例代码(谢谢!)

lst <- list(
    list("one", "12345", "2019-01-01"),
    list("two", "67890", "2019-01-02"))
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏!

Mau*_*ers 5

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

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

lst <- list(
    list("one", "12345", "2019-01-01"),
    list("two", "67890", "2019-01-02"))
Run Code Online (Sandbox Code Playgroud)

list为了投射每个元素的第三个元素,as.Date我们可以这样做

lst <- map(lst, ~{.x[[3]] <- as.Date(.x[[3]]); .x})
Run Code Online (Sandbox Code Playgroud)

我们可以确认每个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"
Run Code Online (Sandbox Code Playgroud)

更新

purrr规范tidyverse的方法是使用modify_at(感谢@H1)

lst <- map(lst, ~modify_at(.x, 3, as.Date))
Run Code Online (Sandbox Code Playgroud)

结果和以前一样。

  • `modify_at` 在这里效果很好 - `map(lst, ~modify_at(.x, 3, as.Date))`。 (2认同)