【问题标题】:Extract name of dataframe within a map function在地图函数中提取数据框的名称
【发布时间】:2019-07-17 09:20:37
【问题描述】:

我想在地图函数中提取数据框的名称。 因此,我创建了 3 个示例数据框:

name_df1<-data.frame()
name_df2<-data.frame()
name_df3<-data.frame()

通过这段代码,我得到了我想要的:

deparse(substitute(name_df1))
[1] "name_df1"

现在我正在尝试将此代码放入地图函数中以提取所有 3 个数据框的名称:

但首先我要创建一个所有数据帧的列表,这是运行地图功能所必需的:

list_dfs<-ls()
[1] "list_dfs" "name_df1" "name_df2" "name_df3"

这是我的地图功能:

map(mget(list_dfs), function(x)
  deparse(substitute(x)))

But I get this:

$name_df1
[1] ".x[[i]]"

$name_df2
[1] ".x[[i]]"

$name_df3
[1] ".x[[i]]"

谁能帮我解决这个问题?

【问题讨论】:

  • 这个更广泛的应用是什么?在当前情况下,您会得到想要做的事情ls(pattern = "name_df")
  • 我想为每个数据框创建一个 ggplot。我想用+ labs(title =name_df1)添加一个标题

标签: r purrr


【解决方案1】:

我认为在这里通过分别传递名称和数据框更容易使用map2

library(tidyverse)

list_dfs<-ls(pattern = "name_df")
map2(mget(list_dfs), list_dfs, ~ggplot(.x) + .... + labs(title = .y))

【讨论】:

  • 感谢您采用这种方法。这适用于我的情况。
  • 但是有没有人有另一种方法来解决上述问题?
【解决方案2】:

我们可以使用imap 对对象的mget 返回list 执行此操作,因为list 将是一个命名列表,imap 可以将.y 提取为names

library(purrr)
library(dplyr)
library(ggplot2)
imap(mget(list_dfs), ~  ggplot(.x) + 
                            ... +
                            labs(title = .y))

【讨论】:

    猜你喜欢
    • 2022-06-16
    • 2020-02-03
    • 2019-10-31
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 2010-10-05
    • 2021-08-04
    • 1970-01-01
    相关资源
    最近更新 更多